玉祥平台客服-15087858732

标题: ORACLE表统计信息与列统计信息、索引统计信息 [打印本页]

作者: 张兴康    时间: 2020-7-9 14:02
标题: ORACLE表统计信息与列统计信息、索引统计信息
ORACLE表统计信息与列统计信息
我们在分析某些语句的性能时,会分析一些信息。像表、列、索引、直方图等等,本篇主要讲表与列、索引的统计信息收集与分析。

一、表统计信息
       

                 2. 查看表的统计信息用dba_tab_statistics。        

       

二、列统计信息
       
               
字段解释,可参考联机文档(http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_2101.htm#REFRN20275

统计信息解释一下:
NUM_DISTINCT:该列中唯一值的数量。
LOW_VALUE:该列的最小值。显示为内部存储格式。对于字符串列,只存储前32字节。
HIGH_VALUE:该列的最大值。显示为内部存储格式。对于字符串列,只存储前32字节。
DENSITY:0到1之间的一个小数。接近0表示对于该列的过滤操作能去掉大多数的行。接近1表示对于该列的过滤操作起不到什么作用。如果没有直方图,DENSITY=1/NUM_DISTINCT。
HISTOGRAM:表明是否有直方图信息,如果有,是什么类型?FREQUENCY表示频率类型,HEIGHT BALANCED表示平均分布类型;如果没有,则为NONE。
NUM_BUCKETS:直方图里的桶数。它表示一组同类的数值放在一起。直方图最少由一个桶组成。如果没有直方图,则为1,最大桶数为254。

这里的LOW_VALUE和HIGH_VALUE都是内部格式,所以必须转换为可读懂的格式,有两种方法。

1)使用工具包utl_raw提供的函数cast_to_binary_double、cast_to_binary_float、cast_to_binary_integer、cast_to_number、cast_to_nvarchar2、cast_to_raw和cast_to_varchar2。这些函数就是把内部存储格式转换为实际值。

SELECT UTL_RAW.CAST_TO_NUMBER(LOW_VALUE), UTL_RAW.CAST_TO_NUMBER(HIGH_VALUE)
   FROM DBA_TAB_COL_STATISTICS
  WHERE TABLE_NAME = 'MSTB_ORDER_HEADER'
   AND COLUMN_NAME = 'GROUP_ORDER_ID';

UTL_RAW.CAST_TO_NUMBER(LOW_VALUE) UTL_RAW.CAST_TO_NUMBER(HIGH_VALUE)
--------------------------------- ----------------------------------
                                 0                            7821636

2) 使用dbms_stats提供的过程convert_raw_value、convert_raw_value_nvarchar和convert_raw_value_rowid。该过程不能直接在SQL语句中使用,通常只用于PL/SQL程序中。

DECLARE
   L_LOW_VALUE  DBA_TAB_COL_STATISTICS.LOW_VALUE%TYPE;
   L_HIGH_VALUE DBA_TAB_COL_STATISTICS.HIGH_VALUE%TYPE;
   L_VAL1       T.VAL1%TYPE;
BEGIN
   SELECT LOW_VALUE, HIGH_VALUE
     INTO L_LOW_VALUE, L_HIGH_VALUE
     FROM DBA_TAB_COL_STATISTICS
  WHERE TABLE_NAME = 'MSTB_ORDER_HEADER'
   AND COLUMN_NAME = 'GROUP_ORDER_ID';

  DBMS_STATS.CONVERT_RAW_VALUE(L_LOW_VALUE, L_VAL1);
   DBMS_OUTPUT.PUT_LINE('low_value: ' || L_VAL1);
  DBMS_STATS.CONVERT_RAW_VALUE(L_HIGH_VALUE, L_VAL1);
   DBMS_OUTPUT.PUT_LINE('high_value: ' || L_VAL1);
END;
/

UTL_RAW.CAST_TO_NUMBER(LOW_VALUE) UTL_RAW.CAST_TO_NUMBER(HIGH_VALUE)
--------------------------------- ----------------------------------
                                 0                            7821636




作者: 张兴康    时间: 2020-7-9 14:03

作者: fteair    时间: 2020-7-9 17:20

作者: 张兴康    时间: 2020-7-11 14:28

作者: fteair    时间: 2020-7-11 17:37

作者: caixuqad    时间: 2020-7-12 16:32

作者: caixuqad    时间: 2020-7-12 16:59

作者: 张兴康    时间: 2020-7-23 14:09





欢迎光临 玉祥平台客服-15087858732 (http://bbs.delit.cn/) Powered by Discuz! X3.2