直方图分为两种类型,一种是比较常见的”高度均衡”,还有一种是”频率均衡”。
我在准备的时候一直是按照”高度均衡”这种情况介绍的,之前遇到的也都是高度均衡的。
所谓高度均衡—直方图的数量小于等于distinct+1值, ENDPOINT_NUMBER这一列表示平均分配的分数, 而频率均衡则相反,为大于distinct值,ENDPOINT_NUMBER这一列表示列distinct的数值,看如下试验:
如:
kl@k02> create table t2341 as select mod(rownum,3) a from dba_objects;
Table created.
kl@k02> exec dbms_stats.gather_table_stats(user,'T2341',cascade=>true,method_opt=>'for all columns size 4');
PL/SQL procedure successfully completed.
kl@k02> select COLUMN_NAME,ENDPOINT_NUMBER,ENDPOINT_VALUE from DBA_TAB_HISTOGRAMS where table_name='T2341';
COLUM ENDPOINT_NUMBER ENDPOINT_VALUE
----- --------------- --------------
A 1 0
A 2 1
A 4 2
(这里方法主要是把数据均匀分配,每个桶的行数基本一致,你这里只看到了3个桶,原因如下):
值: (0-----------) (1----------------------------------) (2--------------)
桶: (1-----------) (2---------------)(3----------------) (4--------------) 因2,3内的数据分布一至,所以只显示2这个桶号。
kl@k02> exec dbms_stats.gather_table_stats(user,'T2341',cascade=>true,method_opt=>'for all columns size 5');
PL/SQL procedure successfully completed.
kl@k02> select COLUMN_NAME,ENDPOINT_NUMBER,ENDPOINT_VALUE from DBA_TAB_HISTOGRAMS where table_name='T2341';
COLUM ENDPOINT_NUMBER ENDPOINT_VALUE
----- --------------- --------------
A 9731 0
A 19463 1
A 29195 2
(这里桶数量为5,直方图变为频率均衡方式,ENDPOINT_NUMBER也就变成了相应的distinct数量)
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/661919/viewspace-1029996/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/661919/viewspace-1029996/