如何加快统计大表记录数的速度

本文针对超过10GB的大表统计问题进行优化探讨,通过调整Oracle参数、采用全表扫描及并行查询等策略,显著提高了统计效率,将数千张表的统计时间从数小时缩短至一刻钟。
但是,对于数据库中表很大的话,这个程序会非常的慢的。这一篇专门说说大表的统计优化。我这里说的大表,当然是相对的了,SIZE超过10GB的吧。

还是先说说普通表统计的语句:

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/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值