Oracle 直方图理论
一.何为直方图
直方图是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图,如图所示
二.ORACLE 直方图
在Oracle中直方图是一种对数据分布情况进行描述的工具。它会按照某一列不同值出现数量多少,以及出现的频率高低来绘制数据的分布情况,以便能够指导优化器根据数据的分布做出正确的选择。在某些情况下,表的列中的数值分布将会影响优化器使用索引还是执行全表扫描的决策。
直方图的使用不受索引的限制,可以在表的任何列上构建直方图。构造直方图最主要的原因就是帮助优化器在表中数据严重偏斜时做出更好的规划。如:一到两个值(status=0和status=1,其中=0有100条数据,=1有1000000条数据,只有这两个值)就构成了表中的大部分数据(数据倾斜),相关查询就可能无法帮助减少满足查询所需的I/O数量(如查询status=1)。创建直方图可以让基于成本的优化器知道何时使用索引才最合适,或何时根据where子句中的值返回表中的80%的记录。
三.直方图分类及原理
- 等频直方图:针对包含很少不同值的数据集,就是数据分布很均匀。
- 等高直方图:针对包含很多不同值的数据集,数据分布不均匀 。
直方图信息的准确性由两个数值决定,一个是bucket的个数,一个是num_distinct的个数。一般来说,bucket的数量越多,关于列数据分布的信息就越准确,但统计直方图花费的时间就越多,oracle中bucket的最大为254个,默认是75个。而sql server中默认是200个。
- 当BUCTET < 表的NUM_DISTINCT值得到的是HEIGHT BALANCED 等高直方图
- 当BUCTET > 表的NUM_DISTINCT值的时候得到的是FREQUENCY 等频直方图
由于满足BUCTET = 表的NUM_DISTINCT值概率较低,所以在Oracle中生成的直方图大部分是HEIGHT BALANCED(高度平衡)直方图。
四.创建直方图
Oracle 通过指定 dbms_stats. gather_table_stats 的 method_opt 参数,来创建直方图的。 method_opt参数说明
method_opt |
Accepts either of the following options, or both in combination:
size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY} column is defined as column := column_name | extension name | extension - integer : Number of histogram buckets. Must be in the range [1,254]. - REPEAT : Collects histograms only on the columns that already have histograms - AUTO : Oracle determines the columns on which to collect histograms based on data distribution and the workload of the columns. The default is FOR ALL COLUMNS SIZE AUTO. |
Examples
An extension can be either a column group (see Example 1) or an expression (see Example 2). Example 1
DBMS_STATS.GATHER_TABLE_STATS(
'SH', 'SALES', method_opt => 'FOR COLUMNS (empno, deptno)');
Example 2
DBMS_STATS.GATHER_TABLE_STATS('SH', 'SALES', method_opt => 'FOR COLUMNS (sal+comm)'); Example 3
DBMS_STATS.GATHER_TABLE_STATS('SH', 'SALES', method_opt => 'FOR COLUMNS sal size 1');
注:1表示1个bucket的数量,即不做直方图处理 Example 4
DBMS_STATS.GATHER_TABLE_STATS('SH', 'SALES', method_opt => 'FOR COLUMNS (sal+comm) size 10');
注:把sal,comm两列,按(sal+comm)表达式的和分成10个bucket。 Example 5
DBMS_STATS.GATHER_TABLE_STATS('SH', 'SALES', method_opt => 'FOR COLUMNS (sal,comm) size 10');
Oracle 直方图理论的更多相关文章
- Oracle直方图的详细解析
yuanwen:http://blog.csdn.net/javacoffe/article/details/5578206 Oracle直方图解析 一. 何谓直方图: 直方图是一种统计学上的工 ...
- Oracle直方图的详细解析(转)
Oracle直方图解析 一. 何谓直方图: 直方图是一种统计学上的工具,并非Oracle专有.通常用于对被管理对象的某个方面的质量情况进行管理,通常情况下它会表现为一种几何图形表,这个图形表是根 ...
- Oracle直方图导致SQL不走索引.
在ITPUB 上看到一个帖子 http://www.itpub.net/thread-1875212-1-1.html 同一条SQL语句,只有查询条件不一样,查询返回的结果集都为0,一个走了全表扫描, ...
- Oracle 直方图实例测试
--创建表 SQL> create table tab (a number, b number); Table created. --插入数据 SQL> begin .. loop ins ...
- ORACLE直方图(10g)
为什么需要直方图 ?当表中一列数据比较的值分布比较均匀时,optimzer可以很好的通过最大值,最小值和NDV(唯一值的个数),就可以判断出cardinality.对于cardinality越精确,o ...
- oracle直方图
直方图 当某列数据分布不均衡.为了让CBO能生成最佳的运行计划,我们可能须要对表收集直方图,直方图最大的桶数(Bucket)是254. 收集直方图是一个很耗时的过程,如无必要.千万别去收集直方图. O ...
- Oracle GoldenGate理论
1Oracle GoldenGate处理方法和支持的数据库Oracle GoldenGate在多样和异构的基础IT平台中,可以在事务级别上进行数据交换和数据操作.在保证交易完整性和最小的开销的条件下, ...
- Oracle体系结构理论
问题: 1:通常说Oracle数据库是什么? 2:如何理解Oracle实例? 3:Oracle实例由哪些部分组成,它们之间的作用是什么? 4:如何理解Oracle的物理结构? 5:Oracle的物理结 ...
- oracle信息统计
优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...
随机推荐
- Library Cache: Lock, Pin and Load Lock
What is "Library cache lock" ? This event controls the concurrency between clients of the ...
- iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon[转]
在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView 在以前,一个UIViewController的View可能有很多小的子view.这些子view很多时候 ...
- RequireJS API
可以找到许多的解读,但是原文总是最重要的,也是最正宗的说明,直接访问 RequireJS 有时不太方便,这里将 RequireJS 2.0 API 的原文转载到博客园,方便查看. This is th ...
- Java将Unix时间戳转换成指定格式日期
public String TimeStamp2Date(String timestampString, String formats){ Long timestamp = Long.pars ...
- 008 The Generics In JAVA
泛型是JAVA的核心特型之一,我们先看一个例子: 没有使用泛型前,如下: import java.util.ArrayList; import java.util.List; public class ...
- POI实现word文档转html文件
POI word文件转html package com.feiruo.officeConvert; import java.io.BufferedWriter; import java.io.File ...
- lib制作
生成模拟器和真机通用lib命令: lipo -create libKIF-os.a libKIF-simulator.a -output libKIF.a. 需要cd到 愿文件.a所在的目录. li ...
- LoadRunner性能测试指挥中心Controller 《第四篇》
一.设计场景 1.设计性能测试场景 Controller有两个视图:设计(Design)视图和运行(Run)视图.启动Controller,在Controller主界面里,我们可以看到这两个视图. 1 ...
- Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器.状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址.根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I ...
- [my]_ubuntu12.10_/etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb-src http://mirror ...