600万条数据的select count(*)问题。

xyzhh xyzhh 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的一张表里有6百多万条数据(没有作分区),执行一个select count(*) from tab;
1。需要一分多钟的时间,这是否正常呢?

后来,我在这个表上和他的索引上作了一次分析,然后执行select count(*) from tab;发现需要20多分钟时间甚至更长。(优化器是choose)
2。为什么越分析越慢呢

经过跟踪发现,没有作分析前,需要作全表扫描,此时能看到操作系统的磁盘i/o很大;分析后,在其中的一个索引上作快速扫描,处理的block数要比全表扫描少了一大半(看来优化器的选择是没错的),但是,此时到操作系统的磁盘i/o很小,执行速度非常慢,我把此索引rebuild也没有用。(表里是日志,仅仅每天批量插入一次,很少做查询。
3。 为什么处理的块越少磁盘i/o越低(处理速度大幅下降)?

4。对于这种海量数据库的表,大家在使用和维护上有什么好的建议?


5。谢谢!
...全文
评论 44
收藏 已收藏
分享
返回顶部
xyzhh
Oracle 高级技术 3,499 成员 18,710 内容