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值的数量,数据分 ...
随机推荐
- CVU介绍
ORA.CVU New resource (Cluster Verification Utility) is added in 11.2.0.2 Unlike the previous resour ...
- github入门
一.先了解 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度快 github 本地有仓库,储存着所有repository的历史: ...
- 欧拉路径Hrbust1351
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1351 这道题先利用并查集的知识点, ...
- WebsitePanel(wsp)配置详解(安装指南)
WebsitePanel(wsp)配置详解(安装指南) 铁卫士原创 估计很多同学都还不知道WebsitePanel是什么东东吧,WebsitePanel简称wsp是微软旗下,开源免费的虚拟主机系统,我 ...
- xUtils框架介绍(三)
接上回,继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把Db ...
- Laxcus大数据管理系统2.0(11)- 第九章 容错
第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...
- No.005 Longest Palindromic Substring
5. Longest Palindromic Substring Total Accepted: 120226 Total Submissions: 509522 Difficulty: Medium ...
- java 中的fanal
三.java中有final final 修饰符 关键字可用于修饰类,变量和方法,final关键字有点类似于C#里的sealed 关键字,用于表示它修饰的类,方法和变量不可改变. fina修饰变量时,表 ...
- Leetcode048. Rotate Image
//鬼晓得上下反转,对角翻转之后竟然正好顺时针九十度,数学事体育老师教的class Solution { public: void rotate(vector<vector<int> ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...