ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何加快统计大表记录数的速度

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

原创 Linux操作系统 作者:tolywang 时间:2007-12-08 00:00:00 0 删除 编辑
但是,对于数据库中表很大的话,这个程序会非常的慢的。这一篇专门说说大表的统计优化。我这里说的大表,当然是相对的了,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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13098158