- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
php防止sql注入的函数 SQL语句性能优化
导读:就爱阅读网友为您分享以下“SQL语句性能优化”资讯,希望对您有所帮助,感谢您对92的支持!
SQL语句性能优化
编码过程一些注意事项:
1、Oracle的From子句表的顺序:记录越多的表放在越前面(左);
右边的表位驱动表,驱动表越小,最终扫描的数据越少。
Oracle解析器按照从右向左的顺序处理From子句中的表名,最右的表将被最先处理。如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其它表所引用的表。
2、Oracle的where子句表达式的顺序:过滤掉最大数目记录的条件放到where子句的末尾。Oracle的执行计划的条件过滤从最后向前进行,过滤数据最多的在最后可以提高数据库的查询速度。
3、Select子句中避免使用*’,Oracle在解析的过程中会将*’一次转换成所有的列名,这个工作是通过查询数据字典完成的,这样将耗费更多的事件;
4、在执行结果等效的情况下,使用Truncate代替Delete;
当删除表中记录时,在通常情况下,回滚段用来存放可以被恢复的信息,如果没有
commit事务,oracle会将数据恢复到删除之前的状态。使用truncate时,回滚段不再存放任何可恢复的信息,数据不能被恢复。
5、为了在查询过程中要尽量使用索引,对于like语句避免使用右匹配或者中间匹配的模糊查询;
6、将过滤条件尽可能放到Where子句中,而不是放到Having子句中;
Having子句是用来对分组后的结果进行过滤,限制分组后的查询结果。Having子句会再检索出所有记录之后才对结果集进行过滤,而且在使用Having子句时一般需要执行排序、统计等操作。执行这些操作时,SQL优化器会进行一些额外的工作,这就需要消耗额外的时间。
7、在SQL语句中,要减少对表的查询,特别是在含有子查询的SQL子句中;
8、使用表的别名可以减少解析的时间并避免引起歧义;
9、使用EXISTS替代IN,用NOT EXISTS替代NOT IN;
10、通常情况下,采用表连接的方式比exists更有效率;
11、当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换,EXISTS使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。例子:
(低效):
SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E
WHERE D.DEPT_NO=E.DEPT_NO;
(高效):
SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS(SELECT ‘X’ FROM EMP E WHERE E.DEPT_NO=D.DEPT_NO);
12、使用gt;=’替代gt;’,这样DBMS可直接跳到等于的记录上,可能会避免向前的扫描工作;
13、用union替代or,通常情况下, 用UNION替换WHERE子句中的OR时,将会起到较好的效果. 对索引列使用OR将造成全表扫描.
注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低.
在下面的例子中, LOC_ID 和REGION上都建有索引.
高效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10
UNION
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE REGION = “MELBOURNE”
低效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面.
14、避免在索引列上使用计算,如where语句中的表达式sal *12 gt; 2500应该改为 sal 〉 2500/12;
15、避免在索引列上使用IS NULL和IS NOT NULL工作,这样index将不被使用;
16、如果必要,使用函数索引,如对Upper(name)建立索引;
17、避免在索引列上使用Not,这样将执行全表扫描;
18、如果可能,用union-all替换union语句:当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序. 如果用UNION ALL替
您可能关注的文档
- literature review ENG7330 Lesson 3 Sample Literature Review 2.doc
- loadrunner tuxedo LoadRunner测试Tuxedo应用的两种方式.doc
- LNG施工组织设计_图文.doc
- lucene 6.1使用指南 绿山使用指南1.doc
- mark levine 爵士理论 Mark Levine爵士理论_图文.doc
- martin的音箱DIY跟我来_图文.doc
- mastercam后处理下载 mastercam x5 后处理.doc
- led图文控制系统 列控系统原理_图文.doc
- matlab 函数 matlab函数集结.doc
- matlab 优化工具箱 机械优化设计论文(基于MATLAB工具箱的机械优化设计).doc
最近下载
- 苏教版五年级上册《我们的大脑》教学设计.docx
- 贵州省2024年高三年级4月适应性考试 地理试卷.docx
- GEUPS维护及故障讲课文档.ppt VIP
- 触摸屏技术的原理及应用.docx VIP
- 路桥施工计算手册.docx
- 年产50吨瑞舒伐他汀钙、5吨匹伐他汀钙、50吨恩格列净、50吨恩格列净中间体EM1、5吨贝曲西班马来酸盐、200吨阿托伐他汀中间体B-4、200吨瑞舒伐他汀中间体D-1等产品项目环境影响报告书.pdf
- 六年级美术上册《劳动最光荣》课件.ppt
- 抖音直播间1000个违禁词(一举夺葵版).docx
- 反渗透法海水淡化产品水水质控制指标及水质调整措施.pdf VIP
- 《论语》论仁、孝、君子、教育.doc
文档评论(0)