暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 生成频率直方图

原创 Asher.HU 2021-02-04
651


此方案显示了如何使用示例架构生成频率直方图。

假设条件

此方案假定您要在sh.countries.country_subregion_id上生成频率直方图该表有23行。

以下查询显示该country_subregion_id列包含8个不均匀分布的值(包括示例输出):

SELECT country_subregion_id, count(*)
FROM   sh.countries
GROUP BY country_subregion_id
ORDER BY 1;
 
COUNTRY_SUBREGION_ID   COUNT(*)
-------------------- ----------
               52792          1
               52793          5
               52794          2
               52795          1
               52796          1
               52797          2
               52798          2
               52799          9

生成频率直方图:

  1. 收集sh.countriescountry_subregion_id列的统计信息,让存储桶数默认为254。

    例如,执行以下PL / SQL匿名块:

    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS ( 
        ownname    => 'SH'
    ,   tabname    => 'COUNTRIES'
    ,   method_opt => 'FOR COLUMNS COUNTRY_SUBREGION_ID'
    );
    END;
    
  2. 查询该country_subregion_id的直方图信息

    例如,使用以下查询(包括示例输出):

    SELECT TABLE_NAME, COLUMN_NAME, NUM_DISTINCT, HISTOGRAM
    FROM   USER_TAB_COL_STATISTICS
    WHERE  TABLE_NAME='COUNTRIES'
    AND    COLUMN_NAME='COUNTRY_SUBREGION_ID';
     
    TABLE_NAME COLUMN_NAME          NUM_DISTINCT HISTOGRAM
    ---------- -------------------- ------------ ---------------
    COUNTRIES  COUNTRY_SUBREGION_ID            8 FREQUENCY
    

    优化程序选择频率直方图,因为该列中存在n个或更少的不同值,其中n默认为254

  3. 查询该country_subregion_id的端点号和端点值

    例如,使用以下查询(包括示例输出):

    SELECT ENDPOINT_NUMBER, ENDPOINT_VALUE
    FROM   USER_HISTOGRAMS
    WHERE  TABLE_NAME='COUNTRIES'
    AND    COLUMN_NAME='COUNTRY_SUBREGION_ID';
     
    ENDPOINT_NUMBER(端点号) ENDPOINT_VALUE(端点值)
    ---------------        --------------
                  1          52792
                  6          52793
                  8          52794
                  9          52795
                 10          52796
                 12          52797
                 14          52798
                 23          52799
    
    端点号:可以理解为桶号  
    
    端点值:可以理解为这个桶里最大的值
    
    

    图11-2是直方图中的8个存储桶的图形说明。每个值都表示为投入桶中的硬币。

    图11-2频率直方图

    如图11-2所示,每个不同的值都有其自己的存储桶。因为这是频率直方图,所以端点号是端点的累积频率。对于52793,端点号6表示该值出现5次(6-1)。对于52794,端点号8表示该值出现2次(8-6)。

    每个端点至少比上一个端点2的存储桶都包含一个流行值因此,水桶681214,并23包含一些流行值。优化器根据端点号计算其基数。例如,优化器使用以下公式计算值的基数(C52799,其中表中的行数为23:

    C = 23 * ( 9 / 23 )
    

    19以及10包含nonpopular值。优化器根据密度估计其基数

也可以看看:

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论