一.何为直方图

  直方图是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图,如图所示

二.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:

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
  • FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]...]

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.
- SKEWONLY : Oracle determines the columns on which to collect histograms based on the data distribution of the columns.
- column_name : Name of a column
- extension : can be either a column group in the format of (column_name, Colume_name [, ...]) or an expression

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');

转载于:https://www.cnblogs.com/polestar/p/4330968.html

Oracle 直方图理论相关推荐

  1. 你知道吗?其实 Oracle 直方图自动统计算法存在这些缺陷!(附验证步骤)

    作者 | 吴海存 责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 在某些场景下,表中某一列的数据分布会比较崎岖,使得CBO(cost ba ...

  2. oracle 自动表分析,其实 Oracle 直方图自动统计算法存在这些缺陷!

    原标题:其实 Oracle 直方图自动统计算法存在这些缺陷! 科技细分领域TOP10影响力内容第一季度入选作品 来源 | CSDN 作者 | 吴海存 在某些场景下,表中某一列的数据分布会比较崎岖,使得 ...

  3. oracle 教学内容,oracle数据库理论教学大纲.doc

    oracle数据库理论教学大纲 Oracle数据库 一.课程基本信息 课程名称Oracle数据库课程代码R3550039英文名称ORACLE Database归属学科 (系.部)计算机应用技术学 分2 ...

  4. 深入理解Oracle直方图

    直方图是一种按数据出现的频率来进行分类存储的方法.在Oracle中直方图是用来描述表中列数据的分布情况.每一个sql在被执行前都要经过优化这一步骤那么在优化器给出一个最优执行计划之优化器应该要知道sq ...

  5. oracle rac理论知识

    oracle数据库高可靠性高性能的特性是很多企业需要的,这些年一直给各大政府企业做oracle咨询与规划,实施安装以及维护,回头看看,自己已经忘记大部分oracle rac的整体具体架构理论知识,现在 ...

  6. oracle直方图基数,等频率直方图计算基数

    --------------创建测试表 create table generator as select rownum         id from        all_objects where ...

  7. Oracle GoldenGate理论

    1Oracle GoldenGate处理方法和支持的数据库Oracle GoldenGate在多样和异构的基础IT平台中,可以在事务级别上进行数据交换和数据操作.在保证交易完整性和最小的开销的条件下, ...

  8. Oracle ASM理论及实践介绍

    ASM 首先讲ASM之前,我们先了解一下RAID0和RAID1的故事吧: RAID0:最少由两块磁盘组成,以两个100G的磁盘为例,组成200G的磁盘阵列,那用户写入的数据就会往200G的磁盘内进行写 ...

  9. ORACLE 中dbms_stats的使用

    dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划. execdbms_stats.gather_schema_stats( ...

最新文章

  1. service 与chkconfig
  2. vue 2.0 :key的作用
  3. Smart-Forms套打和不套打
  4. REDHAT6.3 udev 配置 存储器磁盘
  5. 查询成绩最好的前两名_一级建造师成绩查询前这几件事很重要
  6. sqlyog怎么设置默认值_物联网卡三网APN设置
  7. 了结对编程和飞鸽传书
  8. RazorExtensions Templated Razor Delegates
  9. 基于深度学习(端到端)的OCR文字识别
  10. 灯具类产品各国EMC认证标准大全
  11. 缉拿IP冲突之后的“真凶”
  12. 网络通信实验(DM9000,LWIP TCP/IP)
  13. 如何完整保存离线网页
  14. 4054原厂LTH7R座充充电管理IC
  15. 使用镜像服务站下载CentOS安装包
  16. 新媒体运营胡耀文教程:产品运营视阈下的数据分析
  17. 关于谷歌浏览器的自动填充密码
  18. 移动端click延迟解决方案
  19. DUL模型详解——代码+原理——Data Uncertainty Learning
  20. 线上平台/线下渠道,VR营销渠道大盘点

热门文章

  1. 三、Java Web中出现的一些乱码问题总结(详解)
  2. LeetCode 2186. 使两字符串互为字母异位词的最少步骤数
  3. LeetCode 1847. 最近的房间(排序离线计算 + 二分查找)
  4. LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
  5. LeetCode 372. 超级次方(快速幂)
  6. LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)
  7. python多线程实现方式_python中实现多线程有几种方式?
  8. mqtt如何判断设备离线_反渗透纯水设备膜元件如何离线清洗?
  9. LeetCode第 227 场周赛题解
  10. python绘制数字23_Python 画数码数字8