此方案显示了如何使用示例架构生成最高频率直方图。
假设条件
此方案假定您要在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
生成最高频率直方图:
- 收集
sh.countries和country_subregion_id列的统计信息,指定的存储桶少于不同的值。例如,输入以下命令以指定7个存储桶:
BEGIN DBMS_STATS.GATHER_TABLE_STATS ( ownname => 'SH' , tabname => 'COUNTRIES' , method_opt => 'FOR COLUMNS COUNTRY_SUBREGION_ID SIZE 7' ); END; - 查询该
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 7 TOP-FREQUENCY该
sh.countries.country_subregion_id列包含8个不同的值,但直方图仅包含7个存储桶,即n=7。在这种情况下,数据库只能创建最高频率或混合直方图。在该country_subregion_id列中,前7个最频繁的值占行的95.6%,超过了阈值85.7%,生成了最高频率直方图。
其中p =(1-(1/n))*100 = 85.7%
前7个 最频繁的点行数 = 22/ 23(总行数)= 95.6%
- 查询该列的端点号和端点值。
例如,使用以下查询(包括示例输出):
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 52796 11 52797 13 52798 22 52799图11-3是最高频率直方图中的7个存储桶的图形说明。这些值在图中以硬币表示。
图11-3最高频率直方图
如图11-3所示,每个不同的值都有自己的存储桶,但除外
52795,因为它不受欢迎且统计意义不大,因此从直方图中排除了该值 。 (即值 52795 没有存储桶)
与标准频率直方图中的一样,端点号表示值的累积频率。
也可以看看:
- “ 频率直方图的标准 ”
- Oracle Database PL / SQL软件包和类型参考以了解该
DBMS_STATS.GATHER_TABLE_STATS过程 - Oracle数据库参考以了解
USER_TAB_COL_STATISTICS视图 - Oracle数据库参考以了解
USER_HISTOGRAMS视图
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




