innoDB上的慢计数(*)

jef*_*kit 4 mysql performance count

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

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

mysql> select count(*) from message_message;

+ ---------- +

| count(*)|

+ ---------- +

| 2819416 |

+ ---------- +

一组1列(2分35.35秒)

解释一下:mysql> explain select count(*) from message_message;

| id | select_type | 桌子| 类型 可能的钥匙| 关键 key_len | 参考| 行|额外|

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

设置1行(0.02秒)

发生什么事?

Joh*_*ell 5

看看InnoDB中的Post,您需要进行全表扫描,就像在MyISAM中那样,它是一个索引读取。

如果您使用一个where子句,尽管它更改了执行模式以使用索引,那么通常在无限制计数的情况下,InnoDB的速度将比MyISAM慢,因为在无限制计数的情况下,性能会与MyISAM匹配。