- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 听力六级词汇必备.doc
- 新款BETTER明渠流量计中文说明书.doc
- 大学英语(二)试题库试题及答案.doc
- MTBF,即平均无故障时间,英文全称是“Mean Time Between Failure”.doc
- 专利翻译常用术语和词汇.docx
- 考研翻译词汇必备.doc
- 单招单考英语试卷2.doc
- 8A Unit4 Period2(Reading)含答案.doc
- 9. Making It Better精益求精.doc
- 听力教程Unit1部分原文及答案.doc
- Unit2 Animal Kingdom2013级高考复习重大版必修四作业手册及答案.docx
- 第九篇The First Bicycle.doc
- 2015年12月英语六级大纲词汇复习(B).docx
- 陕西省西安市第七十中学八年级英语下册 Unit 10 I’ve had this bike for three years Period 4导学案.doc
- 模块三Unit 2重点句子背诵.doc
- 社会公平(不平等)研究综述.docx
- 2009年英语历年考研真题阅读翻译.docx
- 2011年江苏省中考英语预测卷阅读理解.doc
- 2015 九年级英语期末练习1.doc
- 2011育才英语一模试卷.doc
文档评论(0)