- 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
文档评论(0)