表达式统计
优化器对应用到列上的操作带来的影响一无所知,使用一种类似于多列统计的方法,我们可以收集到表达式统计数据。
可以使用存储过程CREATE_EXTENDED_STATS明确地进行创建,或利用GATHER_%存储过程进行数据统计时,在METHOD_OPT参数中指定表达式进行间接创建。
|
DECLARE l_cg_name VARCHAR2(30);BEGIN -- Explicitly created. l_cg_name := DBMS_STATS.create_extended_stats(ownname => 'SCOTT', tabname => 'EMP', extension => '(LOWER(ENAME))'); -- Implicitly created. DBMS_STATS.gather_table_stats( 'SCOTT', 'EMP', method_opt => 'for columns (upper(ename))');END;/ |
将METHOD_OPT参数设置为“FOR ALL COLUMNS SIZE AUTO”允许对现有的表达式进行数据统计。
|
BEGIN DBMS_STATS.gather_table_stats( 'SCOTT', 'EMP', method_opt => 'for all columns size auto');END;/ |
[DBA|ALL|USER]_STAT_EXTENSIONS视图显示了关于表达式统计的信息,与多列统计一样。
|
COLUMN extension FORMAT A30SELECT extension_name, extensionFROM dba_stat_extensionsWHERE table_name = 'EMP';EXTENSION_NAME EXTENSION------------------------------ ------------------------------SYS_STU3VG629OEYG6FN0EKTGV_HQ6 ("JOB","DEPTNO")SYS_STULPA1A#B6YL4KQ59DQO3OADQ ("JOB","MGR")SYS_STU2JLSDWQAFJHQST7$QK81_YB (LOWER("ENAME"))SYS_STUOK75YSL165W#_X8GUYL0A1X (UPPER("ENAME"))4 rows selected.SQL>COLUMN col_group FORMAT A30SELECT e.extension col_group, t.num_distinct, t.histogramFROM dba_stat_extensions e JOIN dba_tab_col_statistics t ON e.extension_name=t.column_nameAND t.table_name = 'EMP';COL_GROUP NUM_DISTINCT HISTOGRAM------------------------------ ------------ ---------------("JOB","DEPTNO") 9 NONE("JOB","MGR") 8 NONE(LOWER("ENAME")) 14 NONE(UPPER("ENAME")) 14 NONE4 rows selected.SQL> |
表达式统计使用DROP_EXTENDED_STATS存储过程进行删除。
|
-- Drop the columnn group.BEGIN dbms_stats.drop_extended_stats(ownname => 'SCOTT', tabname => 'EMP', extension => '(UPPER(ENAME))');END;/PL/SQL procedure successfully completed.SQL> |
对分区对象的统计增强
Oracle 11g也包括了对分区对象统计的改进,未修改过的分区不会重新扫描,这样在大表上收集统计信息时的速度显著提高了,大表上往往包含有部分静态分区数据,分区交换载入(PEL)被用于往表中统计数据,只有新加入到分区中数据才会被扫描,以更新统计数据。
[作者:黄永兵]
上一篇 超线程多核心下Java多线程编程技术分析
下一篇 解读.NET架构核心开发技术
阅读推荐
相关文章