","!=","!>","!<","NOT","NO"> ","!=","!>","!<","NOT","NO" />
提高oracle执行效率若干方法

提高oracle执行效率若干方法

ID:34771511

大小:61.02 KB

页数:10页

时间:2019-03-10

提高oracle执行效率若干方法_第1页
提高oracle执行效率若干方法_第2页
提高oracle执行效率若干方法_第3页
提高oracle执行效率若干方法_第4页
提高oracle执行效率若干方法_第5页
资源描述:

《提高oracle执行效率若干方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、优化SQL语句的若干方法1、操作符号:NOTIN操作符此操作是强列推荐不使用的,因为它不能应用表的索引。推荐方案:用NOTEXISTS或(外连接+判断为空)方案代替"ISNULL","<>","!=","!>","!<","NOT","NOTIN","NOTLIKE","LIKE'%500'",因为他们不走索引全是表扫描。NOTIN会多次扫描表,使用EXISTS、NOTEXISTS、IN、LEFTOUTERJOIN来替代,特别是左连接,而Exists比IN更快,最慢的是NOT操作。使用in时,在IN后面值的列表中,将出现最频繁的值放在最前面

2、,出现得最少的放在最后面,这样可以减少判断的次数2、注意union和unionall的区别。union比unionall多做了一步distinct操作。能用unionall的情况下尽量不用union。3、查询时尽量不要返回不需要的行、列。另外在多表连接查询时,尽量改成连接查询,少用子查询。4、尽量少用视图,它的效率低。对视图操作比直接对表操作慢,可以用存储过程来代替它。特别的是不要用视图嵌套,嵌套视图增加了寻找原始资料的难度。我们看视图的本质:它是存放在服务器上的被优化好了的已经产生了查询规划的SQL。对单个表检索数据时,不要使用指向多个表

3、的视图,直接从表检索或者仅仅包含这个表的视图上读,否则增加了不必要的开销,查询受到干扰.5、创建合理的索引,对于插入或者修改比较频繁的表,尽量慎用索引。因为如果表中存在索引,插入和修改时也会引起全表扫描。索引一般使用于where后经常用作条件的字段上。6、在表中定义字段或者存储过程、函数中定义参数时,将参数的大小设置为合适即可,勿设置太大。这样开销很大。7、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围。select*fromchineseresumewheretitlein('男','女')Select*

4、fromchineseresumewherebetween'男'and'女'是一样的。由于in会在比较多次,所以有时会慢些。8、ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名例如:表TAB116,384条记录表TAB21条记录 选择TAB2作为基础表(最好的方法)selectcount(*)fromtab1,tab2执行时间0.96秒选择TAB2作为基础表(不佳的方法)selectcount(*)fromtab2,tab1执行时间26.09秒9、ORACLE采用自下而上的顺序解析WHERE子句,SELECT…FROMEMPE

5、WHERESAL>50000ANDJOB=‘MANAGER’AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);低效,执行时间156.3秒SELECT…FROMEMPEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)ANDSAL>50000ANDJOB=‘MANAGER’;高效,执行时间10.6秒10、没有必要时不要用DISTINCT和ORDERBY,它们增加了额外的开销。这些动作可以改在客户端执行。14、一般在GROUPBY和HAVING字句之前就能剔除

6、多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优:select的Where字句选择所有合适的行,GroupBy用来分组个统计行,Having字句用来剔除多余的分组。这样GroupBy和Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。15、 使用DECODE函数来减少处理时间使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.例如:SELECTCOUNT(*),SUM(SAL)FROM EMPWHEREDEPT_NO=0020ANDENAMELIKE ‘SMITH%’; SE

7、LECTCOUNT(*),SUM(SAL)FROM EMPWHEREDEPT_NO=0030ANDENAMELIKE ‘SMITH%’;你可以用DECODE函数高效地得到相同结果SELECTCOUNT(DECODE(DEPT_NO,0020,’X’,NULL))D0020_COUNT,COUNT(DECODE(DEPT_NO,0030,’X’,NULL))D0030_COUNT,SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL))D003

8、0_SALFROMEMPWHEREENAMELIKE‘SMITH%’; 类似的,DECODE函数也可以运用于GROUPBY和ORDERBY子句中.16、计算记录条数和一般的观点相

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。