Oracle提高查询效率的方法

Oracle提高查询效率的方法

ID:43325273

大小:47.50 KB

页数:4页

时间:2019-09-30

Oracle提高查询效率的方法_第1页
Oracle提高查询效率的方法_第2页
Oracle提高查询效率的方法_第3页
Oracle提高查询效率的方法_第4页
资源描述:

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

1、优化SQL语句的若干方法1、操作符号:NOTIN操作符此操作是强列推荐不使用的,因为它不能应用表的索引。推荐方案:用NOTEXISTS或(外连接+判断为空)方案代替“ISNULL”,”v>”,”!v”,“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、o对单个表检索数据时,不要使用

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

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

6、T・・・FROMEMPEWHERESAL>50000ANDJOB='MANAGER'AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);低效,执行时间156.3秒SELECT...FROMEMPEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)ANDSAL>50000ANDJOB='MANAGER';高效,执行时间10.6秒10、没有必要吋不要用DISTINCT和ORDERBY,它们增加了额外的开销。这些动作可以改在客户端执行。14、一般在G

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

8、0ANDENAMELIKE'SMITH%';SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_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(DE

9、PT_NO,0030,SAL,NULL))D0030_SALFROMEMPWHEREENAMELIKE'SMITH%';类似的,DECODE函数也可以运用于GROUPBY和ORDERBY子句中.16、计算记录条数和一般的观点相反,count(*)比count⑴稍快,当然如果可

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

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

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