在innoDB上缓慢计数(*)

时间:2012-07-16 13:47:46

标签: mysql performance count

我有一张包含3000000条记录的表message_message

当我进行计数(*)查询时,它非常慢......:

的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_len | ref |行|额外|

| 1 |简单| message_message |指数| NULL |主要| 4 | NULL | 2939870 |使用索引|

1行(0.02秒)

会发生什么?

2 个答案:

答案 0 :(得分:5)

在InnoDB中查看This Post,您需要进行全表扫描,而在MyISAM中则需要读取索引。

如果你使用where子句虽然它改变了执行模式以使用索引,所以一般来说InnoDB在完全不受限制的计数上比MyISAM慢,而性能在限制计数上匹配。

答案 1 :(得分:0)

如果要计算记录数量,最好查询整个表并使用结果集的num_rows属性。如果您想要汇总查询(与Count(...)结合使用),通常会使用GROUP BY