对话Oracle大师:有关SQL优化的建议

转载 2013年12月06日 11:30:52
1:学习oracle的过程中,是往数据库某一方面(比如优化,恢复)专而精学习,还是横向进行广的学习,想听听您的意见?
我个人是两种方式兼有,先是在备份恢复方面钻研的相对深入,后续又在优化器方面做了较深入的钻研,同时从06年开始,我一直坚持在MOS上看Oracle数据库各个方面的文章(这应该算是横向的学习)。

2:在计算索引成本的过程中,在谓词中包含多个列,而且有范围查询时。Effective Index Selectivity,Effective Table Selectivity这两个参数如何去计算?
Jonathan Lewis的《Cost Based Oracle Fundamentals》的第4章“Simple B-tree Access”中详细说明了Effective Index Selectivity和Effective Table Selectivity的算法,你可以去看一下。

3:Oracle在优化in方面,INLIST ITERATOR比采用or展开优化器有哪些优点?
IN-List Expansion / OR Expansion的好处是这样改写成以UNION ALL连接的各个分支后,各个分支就可以各自走索引、分区修剪(Partition Pruning)、表连接等相关的执行计划而互不干扰。但做了IN-List Expansion / OR Expansion的等价改写SQL的效率并不一定会比原SQL要好,这也就意味着IN-List Expansion / OR Expansion一定也是基于成本的,即只有当经过IN-List Expansion / OR Expansion后的等价改写SQL的成本值小于原SQL的成本值时,Oracle才会对目标SQL执行IN-List Expansion / OR Expansion。


4:oracle计算并行成本的时候,是串行成本除以并行度吗?并行扫描的时候,数据不需要使用缓存,直接进行读取块,那这些在成本计算中如何去考虑?
Oracle计算并行成本的公式我也不确定,似乎是没有公开过。CBO在计算成本的时候本来就没有考虑缓存对物理I/O的影响,这也是CBO的局限性之一。


5:在平时创建复合索引的时候,对于范围查询的列,为了减少索引成本,一般都放在索引定义的末尾。但有时候由于clustering_factor的影响,导致按照上述规则建立的索引反而不好,对于clustering_factor比较大,表本身很大,不能通过重建表的方式来降低clustering_factor的情况下,如何去优化sql?
如果是因为聚簇因子的值而导致目标SQL没有走相关的索引并且你又不能重建表,则你可以使用manual类型的sql profile或者SPM固定目标SQL的执行计划。


6:您觉得在sql调优过程中,哪种类型的sql是最难调整的?
最难调的是那种多表关联并且SQL文本极其复杂的SQL,此时你必须要结合执行计划和具体的业务知识来调整,也就是说面对这样的SQL,首先你自己得知道应该走什么样的执行计划。

Oracle SQL优化 总结(大师级别)

SQL 的优化主要涉及几个方面: (1)    相关的统计信息缺失或者不准确 (2)    索引问题 (3)    SQL 的本身的效率问题,比如使用绑定变量,批量DML 采用bulk等,这个就...
  • cs_fei
  • cs_fei
  • 2013年08月07日 22:57
  • 757

oracle优化SQL语句的34条建议

(1)选择最有效率的表名顺序(只在基于规则的优化器中有效) orACLE的解析器按照从右到左的顺序处理 FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先...
  • badyflf
  • badyflf
  • 2012年05月20日 11:01
  • 1048

Oracle SQL优化建议

Oracle SQL优化建议 (2010-09-09 11:54) 分类: 性能调优 SQL优化: 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高。...

oracle优化SQL语句的34条建议

http://blog.csdn.net/badyflf/article/details/7584453   (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) orACLE的解析器...

阿里云数据库挑战赛"SQL优化大师"获奖案例

导读 作者:田帅萌 知数堂MySQL DBA班第9期优秀学员,现任职知数堂助教 一、前言 2017/07在阿里云举办的第一届“阿里云数据库挑战赛第一季“慢SQL性能优化赛”期间...
  • n88Lpo
  • n88Lpo
  • 2017年09月30日 00:00
  • 79

《编程人生》--与编程大师们的对话

读完图灵俱乐部译的《编程人生》的前两章,给我第一感觉就是:听君一席话,胜读十年书。 Peter Seibel先生对编程先驱Zawinski、Fitzpatrick的访谈非常精彩。从这两章访谈中,我收获...
  • peacon
  • peacon
  • 2011年01月15日 23:38
  • 671

大师与少年的对话

成功关键还取决于一个人的心态。其中有个少年想成为少林寺最出色的弟子。他问大师:“我要多少年才能那么出色?”     大师回答说:“至少十年。”     少年说:“十年时间太长了。如果我付出双倍的努...

c# 建议对话

  • 2012年12月29日 09:09
  • 2KB
  • 下载

Oracle提高sql执行效率的建议(2)

尽量不要在where中包含子查询;   关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy...
  • yoyful
  • yoyful
  • 2013年12月21日 00:57
  • 4744

ORACLE PL/SQL编程之八:把触发器说透(写的太长了,建议没事的时候看,想快速查怎么用触发器的不要看)

把触发器说透    大家一定要评论呀,感谢!光发表就花了我将近一个下午。 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话Oracle大师:有关SQL优化的建议
举报原因:
原因补充:

(最多只允许输入30个字)