对话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优化建议

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

sql使用建议及优化方法

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • u010223407
  • u010223407
  • 2016年02月25日 12:48
  • 732

Oracle查询性能优化(面试题:数据库查询优化也是常问的问题)

原则一:注意WHERE子句中的连接顺序:  ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WH...
  • hxpjava1
  • hxpjava1
  • 2017年02月21日 11:40
  • 1193

50多条mysql数据库优化建议

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上...
  • xyw591238
  • xyw591238
  • 2016年07月20日 09:43
  • 562

Mysql sql语句优化的10条建议

1、将经常要用到的字段(比如经常要用这些字段来排序,或者用来做搜索),则最好将这些字段设为索引 2、字段的种类尽可能用int或者tinyint类型。另外字段尽可能用not null 3、当...
  • u011650048
  • u011650048
  • 2016年06月13日 09:40
  • 369

Oracle SQL语句之常见优化方法总结

下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1、SQL语句尽量用大写的;  因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。 2、使用表的别名:  ...
  • dtjiawenwang88
  • dtjiawenwang88
  • 2017年07月09日 16:17
  • 1984

oracle11g 一条几百行行的sql语句 优化 需要适可而止才行

1,同事报告了一条非常复杂的sql,说很慢,叫我优化下。很慢的sql,也很长有几百行吧,^_^,如下: select bm2.bis_must_id,        bm2.qz_year_m...
  • mchdba
  • mchdba
  • 2016年06月06日 20:10
  • 4877

Oracle SQL优化 总结

之前的blog中零零散散的整理了一些优化相关的内容,找起来比较麻烦,所以总结一下,查看的时候方便一点。这篇BLog只看SQL 优化的相关的注意事项,数据库优化部分以后有空在整理。 SQL 的优化主要涉...
  • tianlesoftware
  • tianlesoftware
  • 2011年11月24日 17:05
  • 40978

善用性能工具进行SQL整体优化

SQL优化是一个复杂的工程,首先要讲究从整体到局部。今天我们首先学习关于数据库整体优化都有哪些性能工具,接着分析这些工具的特点,并结合案例进行探索,最后再进行总结和思考。 总体学习思路如下图所示...
  • zhang275827743
  • zhang275827743
  • 2017年07月06日 22:30
  • 1345

好记性不如烂笔头之Oracle SQL优化(1)

一、表连接 1、表连接顺序 在oracle中,不管sql中有多少个表做表连接,在实际执行该sql时都只能先两两做表连接,再依次执行这样的两两表连接过程,直到目标sql中所有的表都已经连接完毕。这样,o...
  • sunmun
  • sunmun
  • 2016年07月14日 13:08
  • 1318
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话Oracle大师:有关SQL优化的建议
举报原因:
原因补充:

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