ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11g统计信息方面增强(五)

11g统计信息方面增强(五)

原创 Linux操作系统 作者:yangtingkun 时间:2010-12-23 23:11:53 0 删除 编辑

11g中,Oracle在统计信息方面进行了进一步的增强。

这篇介绍列组的创建和维护。

11g统计信息方面增强(一):http://yangtingkun.itpub.net/post/468/507713

11g统计信息方面增强(二):http://yangtingkun.itpub.net/post/468/507859

11g统计信息方面增强(三):http://yangtingkun.itpub.net/post/468/507897

11g统计信息方面增强(四):http://yangtingkun.itpub.net/post/468/510913

 

 

前一篇介绍了收集列组的方式。利用这种方法收集统计信息后,Oracle会自动生成一个列组信息。

而实际上,用户可以手工创建或维护列组信息,使得自动收集统计信息的时候会收集列组的统计信息:

SQL> exec dbms_stats.delete_table_stats(user, 't_multi_col')

PL/SQL 过程已成功完成。

SQL> begin
  2  dbms_stats.drop_extended_stats(
  3  user,
  4  't_multi_col',
  5  '(file_id, relative_fno)');
  6  end;
  7  /

PL/SQL 过程已成功完成。

SQL> set serverout on
SQL> declare
  2  v_column_group varchar2(30);
  3  begin
  4  v_column_group := dbms_stats.create_extended_stats(
  5  user,
  6  't_multi_col',
  7  '(file_id, relative_fno)');
  8  dbms_output.put_line(v_column_group);
  9  end;
 10  /
SYS_STUOYUMATSRXHHKNUWV64MRJUG

PL/SQL 过程已成功完成。

删除了上一篇文章自动收集统计信息后留下的列组,然后通过手工方式创建了一个新的列组。最后返回的是列组名称。

如果没有记录下来函数返回的列组名称也没有关系,Oracle提供了很多方式来查询列组信息:

SQL> select dbms_stats.show_extended_stats_name(
  2  user,
  3  't_multi_col',
  4  '(file_id, relative_fno)') from dual;

DBMS_STATS.SHOW_EXTENDED_STATS_NAME(USER,'T_MULTI_COL','(FILE_ID,RELATIVE_FNO)')
--------------------------------------------------------------------------------------
SYS_STUOYUMATSRXHHKNUWV64MRJUG

SQL> select extension_name, extension
  2  from user_stat_extensions
  3  where table_name = 'T_MULTI_COL';

EXTENSION_NAME                 EXTENSION
------------------------------ ------------------------------------------------------------
SYS_STUOYUMATSRXHHKNUWV64MRJUG ("FILE_ID","RELATIVE_FNO")

检查统计信息:

SQL> col column_name format a50
SQL> select column_name, num_distinct, histogram
  2  from user_tab_col_statistics
  3  where table_name = 'T_MULTI_COL';

未选定行

由于刚才删除了表的统计信息,所以统计信息不存在:

SQL> exec dbms_stats.gather_table_stats(user, 't_multi_col')

PL/SQL 过程已成功完成。

SQL> select column_name, num_distinct, histogram
  2  from user_tab_col_statistics
  3  where table_name = 'T_MULTI_COL';

COLUMN_NAME                                        NUM_DISTINCT HISTOGRAM
-------------------------------------------------- ------------ ---------------
OWNER                                                        14 NONE
SEGMENT_NAME                                               5191 NONE
PARTITION_NAME                                              233 NONE
SEGMENT_TYPE                                                 11 NONE
TABLESPACE_NAME                                               3 NONE
EXTENT_ID                                                   199 NONE
FILE_ID                                                       3 FREQUENCY
BLOCK_ID                                                  10010 NONE
BYTES                                                         6 NONE
BLOCKS                                                        6 NONE
RELATIVE_FNO                                                  3 FREQUENCY
SYS_STUOYUMATSRXHHKNUWV64MRJUG                                3 NONE

已选择12行。

可以看到,创建了列组后,即使是默认的统计信息收集方式,这个列组的统计信息也被收集,从而达到了数据库自动收集列组统计信息的目的。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-682508/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10438763