【12c】直方图Histograms

直方图是12c中提供列值详细分布的统计信息,用于优化执行计划。文章介绍了直方图的目的,创建条件,类型如频率、最高频率和高度平衡直方图,以及基数算法和桶压缩的概念。直方图通过记录列值的分布,帮助数据库在处理数据倾斜时生成更精确的基数估计。
摘要由CSDN通过智能技术生成

直方图,一种特殊类型的列的统计信息,它能提供表中列的更详细的数据分布信息,直方图将值存放于桶(buckets)中。基于不同值的数目和数据的分布,数据库选择要创建的直方图类型,直方图的类型有如下几种:

  • 频率直方图和顶频直方图:Frequency histograms and to frequency histograms;
  • 高度平衡直方图(遗留):Height-Balanced hitograms;
  • 混合柱状图:Hybrid histograms;

1 直方图介绍

1.1 使用直方图的目的

默认情况下,优化器假定列的不同值之间时均匀分布的。对于包含数据倾斜列(列中数据的分布不均匀的列),直方图使优化器能够为涉及这些列的过滤或连接谓词生成更准确的基数的估计值,从而生成更精确的执行计划。

1.2 何时数据库创建直方图

使用DBMS_STATS搜集表的统计信息,查询引用表中的列时,数据库会根据之前的查询负载来自动的创建直方图。基本过程如下:

  • 使用DBMS_STATS搜集表的统计信息,且指定METHOD_OPT参数默认为SIZE AUTO;
  • 用户查询对应的表;
  • 数据库记录前面查询时使用的谓词,并更新数据字典表SYS.COL_USAGE$;
  • 再次运行DBMS_STATS时,DBMS_STATS会查询SYS.COL_USAGE$视图并根据前面的查询负载决定哪些列需要直方图。

示例:

1)创建测试表

SQL> create table sh.sales_new as select * from sh.sales;



Table created.

2)查看统计信息

SQL> select column_name,notes,histogram from dba_tab_col_statistics where owner='SH' and table_name='SALES_NEW';



COLUMN_NAME NOTES HISTOGRAM

------------------------------ ------------------------------ ---------------

AMOUNT_SOLD STATS_ON_LOAD NONE

QUANTITY_SOLD STATS_ON_LOAD NONE

PROMO_ID STATS_ON_LOAD NONE

CHANNEL_ID STATS_ON_LOAD NONE

TIME_ID STATS_ON_LOAD NONE

CUST_ID STATS_ON_LOAD NONE

PROD_ID STATS_ON_LOAD NONE



7 rows selected.

3)执行查询

SQL> select column_name,notes,histogram from dba_tab_col_statistics where owner='SH' and table_name='SALES_NEW';



COLUMN_NAME NOTES HISTOGRAM

------------------------------ ------------------------------ ---------------

AMOUNT_SOLD STATS_ON_LOAD NONE

QUANTITY_SOLD STATS_ON_LOAD NONE

PROMO_ID STATS_ON_LOAD NONE

CHANNEL_ID STATS_ON_LOAD NONE

TIME_ID STATS_ON_LOAD NONE

CUST_ID STATS_ON_LOAD NONE

PROD_ID STATS_ON_LOAD NONE



7 rows selected.

4)搜集统计信息

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SH','SALES_NEW',OPTIONS=>'GATHER AUTO');



PL/SQL procedure successfully completed.
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值