Oracle 11g R1中的统计收集增强(二)

日期: 2008-08-12 作者:黄永兵 来源:TechTarget中国 英文

表达式统计


优化器对应用到列上的操作带来的影响一无所知,使用一种类似于多列统计的方法,我们可以收集到表达式统计数据。


可以使用存储过程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 A30
select extension_name, extension
FROM   dba_stat_extensions
where  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 A30
select e.extension col_group,
       t.num_distinct,
       t.histogram
FROM   dba_stat_extensions e
       join dba_tab_col_statistics t ON e.extension_name=t.column_name
AND    t.table_name = ’EMP’;
COL_GROUP                      NUM_DISTINCT HISTOGRAM
—————————— ———— —————
(“JOB”,”DEPTNO”)                          9 NONE
(“JOB”,”MGR”)                             8 NONE
(LOWER(“ENAME”))                         14 NONE
(UPPER(“ENAME”))                         14 NONE
4 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)被用于往表中统计数据,只有新加入到分区中数据才会被扫描,以更新统计数据。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐