读书笔记-《基于Oracle的SQL优化》-第一章-2

原创 2013年12月01日 23:02:47
CBO优化器的基本概念:
可传递性:
1、简单谓词传递
t1.c1=t2.c1 and t1.c1=10,Oracle会自动将t2.c1=10的条件添加。

2、连接谓词传递
t1.c1=t2.c1 and t2.c1=t3.c1,Oracle会自动将t1.c1=t3.c1的条件添加。

3、外连接谓词传递
t1.c1=t2.c1(+) and t1.c1=10,Oracle会自动将t2.c1(+)=10的条件添加。


CBO的局限性:
1、CBO会默认目标SQL语句where条件中出现的各个列之间是独立的,没有关联关系。

2、CBO会假设所有的目标SQL都是单独执行的,并且互不干扰。
不考虑SQL执行已经缓存到Buffer Cache,下次执行不需要访问物理IO到磁盘读索引叶子块、数据块等,高估用索引的成本。

3、CBO对直方图统计信息有诸多限制。
      Oracle 12c之前,Frequency类型的直方图对应的Bucket数量不能超过254,如果目标列的distinct值的数量超过254,Oracle就会使用Height Balanced类型的直方图。对于Height Balanced类型的直方图,因为Oracle不会记录所有的nopopular value的值,所以CBO选错执行计划的概率会比Frequency类型的情形高。
      如果针对文本类型的字段收集直方图统计信息,则Oracle只会将该文本类型字段的文本值头32个字节取出来(实际只取头15个字节),并将其转换成一个浮点数,然后将这个浮点数作为上述文本型字段的直方图统计信息存储于数据字典中。对于那些超过32个字节的文本型字段,只要对应记录的文本值的头32个字节相同,Oracle收集直方图统计信息时,就会认为这些记录文本值相同,但实际是不同的。进而选择错误的执行计划。

4、CBO在解析多表关联的目标SQL时,可能会漏选正确的执行计划。
SQL各表之间可能的连接顺序总数是n!,10个表连接三百多万,15个表连接一百多亿。
CBO至多只会考虑其中根据_OPTIMIZER_MAX_PERMUTATIONS计算出来的有限种可能。
只要目标SQL正确的执行计划不在上述有限可能之中,则CBO一定会漏选正确的执行计划。
SELECT i.ksppinm name, CV.ksppstvl VALUE, CV.ksppstdf isdefault, 
DECODE (BITAND (CV.ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismodified,
DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx
AND i.ksppinm LIKE '%_optimizer_max_%'
AND i.ksppinm LIKE '/_%' ESCAPE '/'  ORDER BY   REPLACE (i.ksppinm, '_', '');

NAME
---------------                                                           
_optimizer_max_permutations                 
                                                
DESCRIPTION
---------------
optimizer maximum join permutations per query block

VALUE         ISDEFAULT ISMODIFIED ISADJ
--------------- ---------      ----------        -----
2000            TRUE         FALSE           FALSE
版权声明:本文为博主原创文章,未经博主允许不得转载。

读书笔记-《基于Oracle的SQL优化》-第一章-1

开始学习崔老师的《基于Oracle的SQL优化》,七百多页,虽然可能会比较痛苦,但想必是一个痛并快乐的过程,尽情享受了。。。 第一章:Oracle里的优化器 优化器是Oracle数...
  • bisal
  • bisal
  • 2013年11月23日 15:44
  • 2399

基于CBO的SQL优化和Oracle实例优化

SQL优化是数据优化的重要方面,本文将分析Oracle自身的CBO优化,即基于成本的优化方法。Oracle为了自动的优化sql语句需要各种统计数据作为优化基础。外面会通过sql的追踪来分析sql的执行...
  • sdksdk0
  • sdksdk0
  • 2017年12月08日 22:21
  • 795

让Oracle跑得更快2—基于海量数据的数据库设计与优化

ITPUB技术丛书  让Oracle跑得更快2—基于海量数据的数据库设计与优化  谭怀远著 ISBN978-7-121-13921-5 2011年7月出版 定价:69.00元 16开 4...
  • broadview2006
  • broadview2006
  • 2011年08月01日 15:17
  • 2477

读书笔记-《基于Oracle的SQL优化》-第一章-3

优化器: 1、优化器的模式: 用于决定在Oracle中解析目标SQL时所用优化器的类型,以及决定当使用CBO时计算成本值的侧重点。这里的“侧重点”是指当使用CBO来计算目标SQL各条执行路径的成本...
  • bisal
  • bisal
  • 2013年12月15日 22:14
  • 1718

Oracle查询转换

概述 Oracle查询转换器的作用是把原始sql重写为语义相同的语句,目的是为了获得更高效的sql。 查询转换主要有四种技术:子查询展开,视图合并,谓词推入,星型转换。 了解查询转换是掌握S...
  • a4221722
  • a4221722
  • 2016年02月18日 21:16
  • 230

《基于ORACLE SQL优化》读书笔记

注:为读《基于ORACLE SQL优化笔记》 对比RBO 与CBO 在数据选择性不佳的情况下,对执行路径的选择。 select * from emp where mgr = 7902; 1.  ...
  • JIANGJIAN12345
  • JIANGJIAN12345
  • 2014年02月06日 16:28
  • 381

读书笔记:人类简史第一章

人类:一种也没什么特别的动物 大约在135亿年前,经过所谓的”大爆炸“之后,宇宙的物质,能量,时间和空间才成为了现在的样子。宇宙的这些基本特征,形成“物理学”。 在这之后过了大约30万年,物质和能量形...
  • EFFORT1989
  • EFFORT1989
  • 2017年02月12日 20:28
  • 274

【重磅干货】看了此文,Oracle SQL优化文章不必再看!

听“俊”一席话,胜读十年书。看了这篇由DBA+社群联合发起人丁俊大师(网名:dingjun123)分享的SQL优化大作,其他OracleSQL优化文章都不必再看了!...
  • u012245006
  • u012245006
  • 2015年12月14日 18:29
  • 1536

读书笔记(第一章)

正在读一本名叫《Head First Python》的书,这个算是读后感? 第一章介绍了列表 list=[]; python的列表可以存任何的东西(按照我现在的理解看) 举个例子: li...
  • a1439864513
  • a1439864513
  • 2018年01月09日 16:16
  • 7

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

下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1、SQL语句尽量用大写的;  因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。 2、使用表的别名:  ...
  • dtjiawenwang88
  • dtjiawenwang88
  • 2017年07月09日 16:17
  • 1982
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记-《基于Oracle的SQL优化》-第一章-2
举报原因:
原因补充:

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