- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低。
调整不良SQL通常可以从以下几点切入:
检查不良的SQL,考虑其写法是否还有可优化内容;
检查子查询考虑SQL子查询是否可以用简单连接的方式进行重新书写;
检查优化索引的使用;
考虑数据库的优化器;
查询的一般规则
? 明确指出检索的字段,尽量减少对多余的列与多余的行读取。
禁止使用 select * from table ……的方式访问表。
? 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
? 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。
? 在判断有无符合条件的记录时不要用SELECT COUNT (*) 语句。 如:
BF: select count(*) from table where condition
在MSSQL和Sybase中,使用 if exists (select 1 from table_name where condition)性能较好,在Oracle中,使用select 1 from table_name where condition较好。
? 内层限定原则
在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。
应绝对避免在order by子句中使用表达式。
正确使用INDEX的SQL
如果和查询条件相关的column上有建index,以下几点能帮助SQL正确的使用index 。
? 避免显式或隐含的类型转换。
where子句中存在数据类型隐形转换的,如用Numeric 型和 Int型的列的比较时,不能使用index。
? WHERE子句中任何对列的操作都将无法使用index,它包括数据库函数、计算表达式等等,所以要尽量减少在=左边的列的运算。如:
BF:select staff_no, staff_name from staff_member where salary*2 = 10000;
RP:select staff_no, staff_name from staff_member where salary = 5000;
? WHERE子句中使用不等于()运算的,将无法使用index。可以用union all改写。如:
BF:select staff_no, staff_name from staff_member where dept_no2001;
RP:select staff_no, staff_name from staff_member where dept_no 2001
Union all
select staff_no, staff_name from staff_member where dept_no 2001;
Oralce中可以考虑使用函数索引。
? WHERE子句中使用substr字符串函数的,将无法使用index,可以用like改写。如:
BF:select staff_no, staff_name from staff_member where substr(last_name,1,4)=’FRED’;
RP:select staff_no, staff_name from staff_member where last_name like ’FRED%’;
? WHERE子句中‘%’通配符在第一个字符的,将无法使用index。如:
select staff_no, staff_name from staff_member where first_name like ‘%DON’;
这种情况的优化方式比较复杂,在后面有关index优化的内容中我们介绍一种在oracle中使用反向索引的优化方式。
? LIKE语句后面不能跟变量,否则也不会使用索引。
where Prod_name like :v_name || % -- 不会使用索引
如果一定要使用变量,可以使用如下技巧:
where Prod_name between :v_name and :v_name || chr(255) -- 会使用索引
? WHERE子句中使用IS NULL和IS NOT NULL不会使用索引。好的设计习惯是表中尽量不使用允许为空的字段,可以根据业务逻辑,将字段设为NOT NULL的同时,提供一个DEFAULT值。另外,当表中建有索引的字段包含NULL时,索引的效率会降低。
? WHE
您可能关注的文档
- SQL_Server_2005_归纳整理2011-2014(修改).doc
- SQL_Server_2005_函数大全.doc
- SQL_Server_2008数据库使用手册(免费版).doc
- SQL_Server_2008新特性.doc
- SQL_Server中各种语句的完整语法.doc
- SQL+Server+2005应用教程--梁庆枫--习题答案.doc
- sqlite3-基础教程.doc
- sql-plus command中文.doc
- SQLPlus Copy命令.doc
- sqlplus 常用命令.doc
- 江苏省泰州市2024-2025学年高三下学期开学调研测试-英语试题(含答案).docx
- 湖南省2025届高三下学期2月开学联考地理试题(含答案).docx
- 海南省文昌中学2024-2025学年高三上学期第三次月考语文试卷(含答案).docx
- 山东省齐鲁名校联考2025届高三学业水平联测(五)-数学试卷(含答案).docx
- 湖南省三湘名校教育联盟五市十校教研教改共同体2025届高三下学期2月入学大联考-英语试卷(含答案).docx
- 江西省金太阳2025届高三下学期2月联考-历史试题(含答案).docx
- 黔南州2024-2025学年度第一学期期末质量监测 物理试卷(学生版).docx
- 海南省文昌中学2024-2025学年高三上学期第三次月考政治(含答案).docx
- 海南省文昌中学2024-2025学年高三上学期第三次月考英语(含答案).docx
- 广东省三校2025届高三下学期2月第一次模拟考试-政治试题(含答案).docx
最近下载
- 一种钢铁综合废水浓盐水的减量化、资源化处理组合方法与系统.pdf VIP
- 《碳中和管理体系 要求》(征求意见稿).pdf
- 医院银行存款管理制度.docx VIP
- 新北师大版数学五年级上册第六单元“组合图形面积”单元试卷 .pdf VIP
- 人教版高中英语必修一全册教学课件.pptx
- 《工逆向工程与增材制造》课件——17. Geomagic Design X 草图建模方法 .pptx VIP
- 海姆立克急救法-(精).ppt VIP
- 北师大版九年级下册数学全册同步练习.docx VIP
- 2025全国青少年模拟飞行考核理论知识题库40题及参考答案1套.docx VIP
- 在线网课学习课堂《兵棋(中国人民武装警察部队警官学院)》单元测试考核答案.docx VIP
文档评论(0)