CBO相关原理--统计信息

Oracle的CBO(基于成本的优化器)利用统计信息选择最优执行计划。统计信息包括表、索引、列的详细统计,如行数、块数、唯一键值等,以及直方图和系统统计信息。收集统计信息可通过dbms_stats包或analyze命令,直方图用于非均匀分布的列选择性估算。动态采样在执行SQL时提供临时表的统计信息。
摘要由CSDN通过智能技术生成

Oracle优化器

Oracle优化器的作用就是为查询语句选择更有效的返回结果的路径。优化器分为两种:RBO和CBO。即分别是基于规则的和基于成本的优化器。
顾名思义,基于规则的优化器,在选择语句的执行路径时,是基于一系列带有优先级的规则来做决定。使用RBO时人工参与语句优化的手段有限。RBO在10g开始不再被支持,但是仍然可以通过修改优化器模式来使用。
CBO在oracle7中被引入,基本思想是给一条SQL语句的所有执行计划制定一个统一的度量,然后给所有执行计划“标价”,这个标注的价格就是执行计划的cost。要把cost算清楚需要两个重要元素:执行计划中数据对象的统计信息和cost算法。统计信息表征了数据对象本身影响执行计划效率的属性,比如行数,唯一键值数等等;cost算法将这些信息处理成具有统一标准的数值,作为cbo选择执行计划的依据。本文主要讨论统计信息的相关概念和原理。

收集统计信息的方法

统计信息的收集有两种方法:
1. 使用dbms_stats包
2. 使用analyze命令
系统统计信息由dbms_stats包产生。
统计信息储存在数据字典表里,cache在share pool中。
dbms_stats包会产生下列内容的统计信息:
表:
rows,blocks,average row length,global statistics,user statistics,sample size,last analyzed
列:
number of distinct values(NDV),number of nulls,data distribution(histogram),
索引:
number of leaf blocks,levels,clustering factor
系统统计信息:
IO performance and utilization
CPU performance and utilization

表统计信息

相关视图:dba_tables, dba_tab_[sub]partitions
用来计算:
1. 表和(子)分区的访问成本
2. Join的基数
3. Join的顺序
表统计信息有下面几个比较重要的内容:
1. num_rows:这是计算基数的基本要素。尤其对于做表连接的驱动表而要,表的行数尤其重要,它决定了被驱动表要被探测多少次。
2. blocks(exact):blocks是指已使用的数据块数(used data blocks)。使用block数与db_file_multiblock_read_count参数可以大体计算出表访问的成本。
3. avg_row_len:表每行的平均长度,单位为字节。

表统计信息物理的储存在sys.tab$数据字典表里,下面三种统计信息只有在使用analyze命令的时候才会收集:empty_blocks(表中从未使用过的数据块数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值