博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 提高查询性能(基础)
阅读量:6305 次
发布时间:2019-06-22

本文共 1319 字,大约阅读时间需要 4 分钟。

hot3.png

#1,选择最有效的表名顺序

 Oracle解析器总是按照从右至左的顺序处理FROM后面的表,因此FROM最右边的表将会被当做驱动表优先处理,当存在多个表关联时,应当使用记录少的表当做驱动表。如果关联的表多的话,则用交叉表作为驱动表。

#2,select中避免使用'*'.

#3,  减少数据库访问的次数

  1. 每当执行一条SQL语句,Oracle 需要完成大量的内部操作,象解析SQL语句,估算索引的利用率,绑定变量, 读数据块等等.由此可       

  2. 见,减少访问数据库的次数,实际上是降低了数据库系统开销

#4, 用Where子句替换HAVING

  1. -->尽可能的避免having子句,因为HAVING 子句是对检索出所有记录之后再对结果集进行过滤。这个处理需要排序,总计等操作                 

  2. -->通过WHERE子句则在分组之前即可过滤不必要的记录数目,从而减少聚合的开销 。

#5,使用 UNION ALL 替换 UNION(如果有可能的话)                                                           

  1. 当SQL语句需要UNION两个查询结果集时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序。       

  2. 如果用UNION ALL替代UNION, 这样排序就不是必要了。 效率就会因此得到提高。                                                                            

  3. UNION ALL会输出所有的结果集,而UNION则过滤掉重复记录并对其进行排序.因此在使用时应考虑业务逻辑是否允许当前的结果集存在重复现象  

#6, 有两个简单例子,以说明 “exists”和“in”的效率问题

    1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;

       T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。

    2) select * from T1 where T1.a in (select T2.a from T2) ;

        T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。

通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执 行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查 询。这也就是使用EXISTS比使用IN通常查询速度快的原因。

#7, AUTOTRACE

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式

SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

转载于:https://my.oschina.net/u/617909/blog/313642

你可能感兴趣的文章
uva 10801 - Lift Hopping(最短路Dijkstra)
查看>>
[Java Web]servlet/filter/listener/interceptor区别与联系
查看>>
POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
查看>>
从零开始学MVC3——创建项目
查看>>
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
延时任务和定时任务
查看>>
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>
oracle表分区详解
查看>>