混合直方图都基于高度的直方图和频率直方图的联合特性。这种“两全其美”的方法使优化器在某些情况下可以获得更好的选择性估计。
基于高度的直方图有时会得出几乎不受欢迎的值的不准确估计值。例如,一个值仅作为一个存储桶的端点值出现,但几乎占据了两个存储桶的值被认为不受欢迎。
为了解决此问题,混合直方图会分配值,以使任何值都不会占用一个以上的存储桶,然后针对直方图中的每个端点(存储桶)存储端点重复计数值,该值是端点值被重复的次数。通过使用重复计数,优化器可以获得对几乎流行的值的准确估计。
11.8.1端点重复计数如何工作
桶中分布的硬币的类比说明了端点重复计数的工作。
下图说明了coins将值从低到高排序的列。
图11-5硬币
您可以收集此表的统计信息,并将的method_opt参数设置DBMS_STATS.GATHER_TABLE_STATS为FOR ALL COLUMNS SIZE 3。在这种情况下,优化器最初coins会将列中的值分为三个存储区,如下图所示。
图11-6值的初始分布
如果存储桶边界拆分了一个值,以使该值的某些出现在一个存储桶中,而另一些存储在另一个存储桶中,则优化器会将存储桶边界(以及所有其他后续存储桶边界)向前移动以包括该值的所有出现。例如,优化器对值进行移位5,以使其现在完全位于第一个存储桶中,而值25现在完全位于第二个存储桶中。
图11-7值的重新分配
端点重复计数可衡量相应存储段端点(即右侧存储区边界处的值)重复自身的次数。例如,在第一个存储桶中,该值5重复3次,因此端点重复计数为3。
图11-8端点重复计数
高度平衡的直方图存储的信息不如混合直方图。通过使用重复计数,优化器可以准确确定存在多少个端点值。
例如,优化器知道该值5出现3次,该值25出现4次,并且该值100出现2次。该频率信息有助于优化器生成更好的基数估计。




