Oracle 直方图理论

摘要:
一.何为直方图直方图是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图,如图所示二.ORACLE直方图在Oracle中直方图是一种对数据分布情况进行描述的工具。四.创建直方图Oracle通过指定dbms_stats.gather_table_stats的method_opt参数,来创建直方图的。

一.何为直方图

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

Oracle 直方图理论第1张

二.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_clauseis defined assize_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}

columnis defined ascolumn := 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 isFOR 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 直方图理论》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SpringBoot2.x集成springSecurity和OAuth2.0启动错误处理WPS单元格格式由常规转为文本的一点坎坷下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

目标检测的图像特征提取之(一)HOG特征

1、HOG特征:        方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进...

Python+OpenCV图像处理之图像直方图

(一)图像直方图 要画直方图必须要安装matplotlib库,Matplotlib 是一个 Python 的 2D绘图库。 图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个...

图像相似度测量与模板匹配总结

摘要本文主要总结了进行目标跟踪、检测中经常使用到的图像相似度测量和模板匹配方法,并给出了具体的基于OpenCV的代码实现。 引言模板匹配是一种在源图像中寻找与图像patch最相似的技术,常常用来进行目标的识别、跟踪与检测。其中最相似肯定是基于某种相似度准则来讲的,也就是需要进行相似度的测量。另外,寻找就需要在图像上进行逐行、逐列的patch窗口扫描,当...

paper 106:图像增强方面的介绍

图像增强是从像素到像素的操作,是以预定的方式改变图像的灰度直方图。有时又称为对比度增强,灰度变换。点运算不可能改变图像内的空间关系,输出像素的灰度值由输入像素的值决定。其作用: 对比度增强:扩展感兴趣特征的对比度。 光度学标定:去掉图像传感器的非线性影响。所谓光度学,就是在可见光波段内,考虑到人眼的主观因素后的相应计量学科称为光度学。标定即计算内参,在光度...

HOG 特征提取算法(原理篇)

在计算机视觉中人们设计了很多算法来提取空间特征,并利用图像梯度信息来识别物体。 其中一种技术叫做 HOG,也即方向梯度直方图(Histogram of Oriented Gradient)。方向梯度直方图听着太高深了,我们先来讲一下这些术语。 直方图就是数据分布的一种图形表现,看起来有点像柱形图,其柱形有不同的高度,每个柱形代表一组处于一定值范围的数据...

matlab练习程序(直方图反向投影)

  做meanshift物体跟踪的时候中间有一步叫做直方图反向投影,所以我就先实现了这样一个步骤。   直方图反向投影说白了就是模板匹配,给定一个较小的目标模板,然后再逐个遍历原图像和模板图像相同的图像块的,对比图像块和模板的直方图,然后把比较结果存入一个新的图像中,新图像中的全局极值就是模板在原图像中所在的位置。这里主要麻烦的是怎么比较两个图像块的直方图...