Oracle提高查询效率的方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle提高查询效率的方法

优化SQL语句的若干方法 1、操作符号: NOT IN操作符 此操作是强列推荐不使用的,因为它不能应用表的索引。 推荐方案:用NOT EXISTS 或(外连接+判断为空)方案代替 IS NULL, , !=, !, !, NOT, NOT IN, NOT LIKE, LIKE %500, 因为他们不走索引全是表扫描。 NOT IN会多次扫描表, 使用EXISTS、NOT EXISTS、IN、LEFT OUTER JOIN来替代,特别是左连接, 而Exists比IN更快,最慢的是NOT操作。 使用in时,在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,这样可以减少判断的次数 2、注意union和union all的区别。union比union all多做了一步distinct操作。能用union all的情况下尽量不用union。 3、查询时尽量不要返回不需要的行、列。另外在多表连接查询时,尽量改成连接查询,少用子查询。 4、尽量少用视图,它的效率低。对视图操作比直接对表操作慢,可以用存储过程来代替它。特别的是不要用视图嵌套,嵌套视图增加了寻找原始资料的难度。 我们看视图的本质:它是存放在服务器上的被优化好了的已经产生了查询规划的SQL。对单个表检索数据时,不要使用指向多个表的视图, 直接从表检索或者仅仅包含这个表的视图上读,否则增加了不必要的开销,查询受到干扰. 5、创建合理的索引,对于插入或者修改比较频繁的表,尽量慎用索引。因为如果表中存在索引,插入和修改时也会引起全表扫描。 索引一般使用于where后经常用作条件的字段上。 6、在表中定义字段或者存储过程、函数中定义参数时,将参数的大小设置为合适即可,勿设置太大。这样开销很大。 7、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围。select * from chineseresume where title in (男,女) Select * from chineseresume where between 男 and 女是一样的。 由于in会在比较多次,所以有时会慢些。 8、ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名 例如:表 TAB1 16,384 条记录 表 TAB2 1 条记录 ? 选择TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间0.96秒 选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒 9、ORACLE采用自下而上的顺序解析WHERE子句, SELECT … FROM EMP E WHERE SAL 50000 AND JOB = ‘MANAGER’ AND 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); 低效,执行时间156.3秒 SELECT … FROM EMP E WHERE 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL 50000 AND JOB = ‘MANAGER’; 高效,执行时间10.6秒 10、没有必要时不要用DISTINCT和ORDER BY,它们增加了额外的开销。这些动作可以改在客户端执行。 14、一般在GROUP BY和HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。 他们的执行顺序应该如下最优:select 的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。 这样Group By和Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。 15、?使用DECODE函数来减少处理时间 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 例如: SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAME LIKE ‘SMITH%’; ? SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0030 AND ENAME LIKE ‘SMITH%’; 你可以用DECODE函数高效地得到相同结果 SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NUL

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档