点评Oracle 11g新特性之统计信息收集
2. 对合并列收集统计信息
对于where条件里具有两个列以上的情况,比如where c1=’A’ and c2=’B’来说,11g以前优化器评估其selectivity时,总是将每个列的selectivity相乘,从而得到整个where条件的selectiviey。但是如果两个列具有很强的依赖关系,比如汽车制造商与汽车型号这两个列来说,我们知道每个汽车制造商所生产的汽车型号几乎都不会重复,也就是说当你发出where 汽车制造商列=’XXX’ and 汽车型号列=’XXX’时,与发出where汽车型号列=’XXX’时返回的记录行数可能几乎一样。这时如果在计算where条件的selectivity时仍然采用将汽车制造商列的selectivity乘以汽车型号列的selectivity时,就会导致总的selectivity过低,从而导致优化器估计返回的记录行数过少,从而可能导致不正确的执行计划。
为了弥补这样的问题,11g以后可以让你将多个依赖程度很高列合并成一个组,然后对该组收集统计信息。具体如何实现,则可以看下面的例子。
select dbms_stats.create_extended_stats('Schema_name','Table_name','(C1,C2)') from dual;
通过调用函数dbms_stats.create_extended_stats将两个或多个列合并,并返回一个虚拟的隐藏列的列名,其名字类似于:SYS_STUW_5RHLX443AN1ZCLPE_GLE4。
然后,我们可以开始对表收集统计信息,收集完以后,你可以使用ALL|DBA|USER_STAT_EXTIONSIONS视图来查看列组合的统计信息。
exec dbms_stats.gather_table_stats('Schema_name','Table_name');
如果你要对组合列收集直方图,则可以如下所示:
exec dbms_stats.gather_table_stats('Schema_name','Table_name',
method_opt=>'for columns (C1,C2) size AUTO');
0
相关文章
- Perl 5.22 发布覃里 · 2015-06-05
- Tom Kyte大神解析Oracle 12c新版本特性覃里 · 2014-11-20
- 谷歌夏日情怀:细数谷歌十大火热新特性王冠 · 2011-09-12
- CUDA 4.0新特性预览董建伟 · 2011-03-01
- MySQL 5.5新特性详解覃里 · 2010-08-04
- Java 7新I/O特性解析覃里 · 2010-05-05
- MySQL 5.1.40新特性及下载覃里 · 2009-10-21
- Exchange 2010服务器端六项展示新功能胡铭娅 · 2009-09-30
- 微软展示Windows 7针对企业用户的新特性和技术亮点胡铭娅 · 2009-09-27
- Silverlight 3 影音支持新特性胡铭娅 · 2009-09-21