还是先说说普通表统计的语句:
| select count(1) from TABLE_NAME; |
也就是上一篇用的方法。
但是,如果是大表,那就拜托了,耗时严重的长。拿我测试机的系统来说,HP superdome,48CPU,96G of RAM。其中部分表耗时超过4个小时。
接下来思考一下,哪些因素会影响大表的count呢!LU人的博客h/gDJ$P@f6k
1.通常我们会考虑使用表的主键索引来扫描!但这不是万能的!
UG`8uFQ@02.即使走索引,索引的访问方法也有很多种,最好是FFS。
w/WAaB x03.如果PK也很差(经过大量删除数据后),FTS也许是最好的LU人的博客#G+bcu K
4.考虑并行。这只在FTS时有意义
哪些Oracle参数可以帮助上述因素呢?
V(f"P*nbVt9O5p%z/~.z01.PGA!因为count需要 sort aggregateLU人的博客?0x ~ ~T2k
2.multiblock,多块读非常重要!!
综上,大表的count就简单了:LU人的博客@T2Ni)L*^ j
| alter session set workarea_size_policy=manual; 9`-e4x8b)X)ij0alter session set sort_area_size =1048576000; M Y,x0RC?0alter session set db_file_multiblock_read_count=128; |
大表首先考虑FFS
select /*+ index_ffs(ACFBNK_CATE006 ACFNK_CATE006_PK)*/ 'ACFNK_CATE006',count(1) from ACFNK_CATE006; Elapsed: 00:02:12.63 |
FTS的考虑parallel
| select /*+ parallel(REFK_RE_C014,4) */'REFK_RE_C014',count(1) from REFK_RE_C014; [Fw hUMN0 /t4H W.G^2~2?0Elapsed: 00:01:32.02 |
如此,则将整个系统6k多张表的统计记录数时间缩短到一刻钟左右。
可能还有别的方法?想到再追加吧。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-85086/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-85086/
本文针对超过10GB的大表统计问题进行优化探讨,通过调整Oracle参数、采用全表扫描及并行查询等策略,显著提高了统计效率,将数千张表的统计时间从数小时缩短至一刻钟。
5万+

被折叠的 条评论
为什么被折叠?



