练习ORACLE统计信息--直方图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习ORACLE统计信息--直方图相关的知识,希望对你有一定的参考价值。

①创建表t
SQL> create table t as select * from dba_objects; Table created. --收集直方图 SQL> exec dbms_stats.gather_table_stats(user,T); PL/SQL procedure successfully completed. --此时数据库为表上的所有字段收集了缺省的统计信息,每个列两个Bucket: SQL> col column_name for a30 SQL> col owner for a10 SQL> col table_name for a10 SQL> col ENDPOINT_ACTUAL_VALUE for a10 ②查询 SQL> select * from dba_tab_histograms where table_name=T and owner=SYS order by 3; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T CREATED 1 2457673.05 SYS T CREATED 0 2456529.48 SYS T DATA_OBJECT_ID 1 88710 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T DATA_OBJECT_ID 0 0 SYS T GENERATED 0 4.0500E+35 SYS T GENERATED 1 4.6211E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T LAST_DDL_TIME 1 2457673.05 SYS T LAST_DDL_TIME 0 2452549.53 SYS T NAMESPACE 0 1 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T NAMESPACE 1 64 SYS T OBJECT_ID 1 88710 SYS T OBJECT_ID 0 2 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_NAME 0 2.4504E+35 SYS T OBJECT_NAME 1 6.2963E+35 SYS T OBJECT_TYPE 0 3.4943E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_TYPE 1 4.5849E+35 SYS T OWNER 0 3.3913E+35 SYS T OWNER 1 4.5831E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T SECONDARY 1 4.6211E+35 SYS T SECONDARY 0 4.0500E+35 SYS T STATUS 1 4.4786E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T STATUS 0 4.4786E+35 SYS T SUBOBJECT_NAME 1 4.5340E+35 SYS T SUBOBJECT_NAME 0 1.8867E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TEMPORARY 1 4.6211E+35 SYS T TEMPORARY 0 4.0500E+35 SYS T TIMESTAMP 0 2.5558E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TIMESTAMP 1 2.6059E+35
28 rows selected.
--同时,列的低值、高值等信息会被收集记录在dba_tab_col_statistics中:
SQL> select table_name,column_name,num_distinct,low_value,high_value,DENSITY from dba_tab_col_statistics where owner=SYS and table_name=T;

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
T OWNER 29
415045585F303330323030
584442 .034482759

T OBJECT_NAME 52212
2F31303030333233645F44656C6567617465496E766F636174696F6E4861
794362437253756253616D706C696E67547970653232395F54 .000019153

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------

T SUBOBJECT_NAME 150
2456534E5F31
575248245F5741495453545F3234313436323135355F30 .006666667

T OBJECT_ID 86995
C103

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
C309580B .000011495

T DATA_OBJECT_ID 9106
80
C309580B .000109818

T OBJECT_TYPE 45

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
434C5553544552
584D4C20534348454D41 .022222222

T CREATED 978
787108180C2624
78740A0B02082A .001022495


TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
T LAST_DDL_TIME 1096
78660A010D2A32
78740A0B02082A .000912409

T TIMESTAMP 1130
313939302D30382D32363A31313A32353A3030
323031362D31302D31313A30313A30373A3431 .000884956

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------

T STATUS 1
56414C4944
56414C4944 1

T TEMPORARY 2
4E

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
59 .5

T GENERATED 2
4E
59 .5

T SECONDARY 2

TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
4E
59 .5

T NAMESPACE 21
C102
C141 .047619048


TABLE_NAME COLUMN_NAME NUM_DISTINCT
---------- ------------------------------ ------------
LOW_VALUE
----------------------------------------------------------------
HIGH_VALUE DENSITY
---------------------------------------------------------------- ----------
T EDITION_NAME 0

0


15 rows selected.

 

③SQL> exec dbms_stats.gather_table_stats(user,‘T‘,method_opt=> ‘for all columns size 1‘);

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats(user,‘T‘,method_opt=>‘for columns owner size 1‘);

PL/SQL procedure successfully completed.
或删除owner字段统计信息,(无用)

--查询发现直方图信息并未被删除
SQL> select * from dba_tab_histograms where table_name=T and owner=SYS order by 3; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T CREATED 1 2457673.05 SYS T CREATED 0 2456529.48 SYS T DATA_OBJECT_ID 1 88710 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T DATA_OBJECT_ID 0 0 SYS T GENERATED 0 4.0500E+35 SYS T GENERATED 1 4.6211E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T LAST_DDL_TIME 1 2457673.05 SYS T LAST_DDL_TIME 0 2452549.53 SYS T NAMESPACE 0 1 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T NAMESPACE 1 64 SYS T OBJECT_ID 1 88710 SYS T OBJECT_ID 0 2 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_NAME 0 2.4504E+35 SYS T OBJECT_NAME 1 6.2963E+35 SYS T OBJECT_TYPE 0 3.4943E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_TYPE 1 4.5849E+35 SYS T OWNER 0 3.3913E+35 SYS T OWNER 1 4.5831E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T SECONDARY 1 4.6211E+35 SYS T SECONDARY 0 4.0500E+35 SYS T STATUS 1 4.4786E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T STATUS 0 4.4786E+35 SYS T SUBOBJECT_NAME 1 4.5340E+35 SYS T SUBOBJECT_NAME 0 1.8867E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TEMPORARY 1 4.6211E+35 SYS T TEMPORARY 0 4.0500E+35 SYS T TIMESTAMP 0 2.5558E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TIMESTAMP 1 2.6059E+35 28 rows selected. ④使用delete_column_stats可以彻底删除列的柱状图信息: SQL> exec dbms_stats.delete_column_stats(user,‘T‘,‘OWNER‘); PL/SQL procedure successfully completed. --此时查询发现owner字段在直方图中已经删除 SQL> select * from dba_tab_histograms where table_name=T and owner=SYS order by 3; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T CREATED 1 2457673.05 SYS T CREATED 0 2456529.48 SYS T DATA_OBJECT_ID 1 88710 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T DATA_OBJECT_ID 0 0 SYS T GENERATED 0 4.0500E+35 SYS T GENERATED 1 4.6211E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T LAST_DDL_TIME 1 2457673.05 SYS T LAST_DDL_TIME 0 2452549.53 SYS T NAMESPACE 1 64 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T NAMESPACE 0 1 SYS T OBJECT_ID 1 88710 SYS T OBJECT_ID 0 2 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_NAME 0 2.4504E+35 SYS T OBJECT_NAME 1 6.2963E+35 SYS T OBJECT_TYPE 1 4.5849E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_TYPE 0 3.4943E+35 SYS T SECONDARY 0 4.0500E+35 SYS T SECONDARY 1 4.6211E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T STATUS 0 4.4786E+35 SYS T STATUS 1 4.4786E+35 SYS T SUBOBJECT_NAME 0 1.8867E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T SUBOBJECT_NAME 1 4.5340E+35 SYS T TEMPORARY 0 4.0500E+35 SYS T TEMPORARY 1 4.6211E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TIMESTAMP 1 2.6059E+35 SYS T TIMESTAMP 0 2.5558E+35 26 rows selected. ⑤再次收集,owner字段又回来了 SQL> exec dbms_stats.gather_table_stats(user,T); PL/SQL procedure successfully completed. SQL> select * from dba_tab_histograms where table_name=T and owner=SYS order by 3; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T CREATED 1 2457673.05 SYS T CREATED 0 2456529.48 SYS T DATA_OBJECT_ID 1 88710 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T DATA_OBJECT_ID 0 0 SYS T GENERATED 0 4.0500E+35 SYS T GENERATED 1 4.6211E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T LAST_DDL_TIME 1 2457673.05 SYS T LAST_DDL_TIME 0 2452549.53 SYS T NAMESPACE 0 1 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T NAMESPACE 1 64 SYS T OBJECT_ID 1 88710 SYS T OBJECT_ID 0 2 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_NAME 0 2.4504E+35 SYS T OBJECT_NAME 1 6.2963E+35 SYS T OBJECT_TYPE 0 3.4943E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T OBJECT_TYPE 1 4.5849E+35 SYS T OWNER 0 3.3913E+35 SYS T OWNER 1 4.5831E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T SECONDARY 1 4.6211E+35 SYS T SECONDARY 0 4.0500E+35 SYS T STATUS 1 4.4786E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T STATUS 0 4.4786E+35 SYS T SUBOBJECT_NAME 1 4.5340E+35 SYS T SUBOBJECT_NAME 0 1.8867E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TEMPORARY 1 4.6211E+35 SYS T TEMPORARY 0 4.0500E+35 SYS T TIMESTAMP 0 2.5558E+35 OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ---------- ---------- ------------------------------ --------------- ENDPOINT_VALUE ENDPOINT_A -------------- ---------- SYS T TIMESTAMP 1 2.6059E+35 28 rows selected. SQL> exec dbms_stats.gather_table_stats(user,T,method_opt=>for columns owner size 1); PL/SQL procedure successfully completed.

 

 

以上是关于练习ORACLE统计信息--直方图的主要内容,如果未能解决你的问题,请参考以下文章

[统计信息]1.Oracle统计信息概述

[统计信息]1.Oracle统计信息概述

Oracle索引梳理系列- 直方图使用技巧及analyze table操作对直方图统计的影响(谨慎使用)

数据库优化之统计分析实战篇

SQL SERVER的统计信息

oracle笔记--DML语句优化