我有一个包含3000000条记录的表message_message。
当我执行count(*)查询时,它非常慢...
mysql> select count(*) from message_message;
+
count(*)
+
2819416
+
集合中的1行(2分35.35秒)
解释一下: mysql> explain select count(*) from message_message;
id | select_type|表|类型| possible_keys | key | key_len | ref | rows |Extra
1| SIMPLE | message_message |索引|空|主|4|空| 2939870 |使用索引
集合中的1行(0.02秒)
发生了什么?
发布于 2012-07-16 21:49:55
看看InnoDB中的This Post,你需要做一个全表扫描,在MyISAM中它是一个索引读取。
如果您使用where子句,尽管它将执行模式更改为使用索引,因此在完全无限制计数时,InnoDB通常会比MyISAM慢,而在受限计数时,性能与之匹配。
发布于 2012-07-16 21:51:57
如果要计算记录数,最好查询整个表并使用结果集的num_rows属性。当您想要有聚合查询(与GROUP BY结合使用)时,通常使用Count(...)。
https://stackoverflow.com/questions/11505732
复制相似问题