600万条数据的select count(*)问题。
xyzhh 2006-07-04 11:09:11 我的一张表里有6百多万条数据(没有作分区),执行一个select count(*) from tab;
1。需要一分多钟的时间,这是否正常呢?
后来,我在这个表上和他的索引上作了一次分析,然后执行select count(*) from tab;发现需要20多分钟时间甚至更长。(优化器是choose)
2。为什么越分析越慢呢
经过跟踪发现,没有作分析前,需要作全表扫描,此时能看到操作系统的磁盘i/o很大;分析后,在其中的一个索引上作快速扫描,处理的block数要比全表扫描少了一大半(看来优化器的选择是没错的),但是,此时到操作系统的磁盘i/o很小,执行速度非常慢,我把此索引rebuild也没有用。(表里是日志,仅仅每天批量插入一次,很少做查询。
3。 为什么处理的块越少磁盘i/o越低(处理速度大幅下降)?
4。对于这种海量数据库的表,大家在使用和维护上有什么好的建议?
5。谢谢!