在11g中,Oracle在统计信息方面进行了进一步的增强。
这篇介绍列组的创建和维护。
前一篇介绍了收集列组的方式。利用这种方法收集统计信息后,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行。
可以看到,创建了列组后,即使是默认的统计信息收集方式,这个列组的统计信息也被收集,从而达到了数据库自动收集列组统计信息的目的。
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html