innoDB上的计数较慢(*)

我有一个包含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 | rows | Extra |

| 1 | SIMPLE | message_message | index | NULL | PRIMARY | 4 | NULL | 2939870 | 使用index |

一排(0.02秒)

发生什么事?


看看InnoDB中的这篇文章,你需要做一个全表扫描,其中MyISAM中的索引读取。

如果您使用where子句,但它会将执行模式更改为使用索引,因此一般而言,InnoDB在完全不受限制的计数上会比MyISAM慢,其中性能与受限计数相匹配。


如果要计算记录数量,最好查询整个表并使用结果集的num_rows属性。 Count(...)通常用于想要进行聚合查询(与GROUP BY结合使用)的情况。

链接地址: http://www.djcxy.com/p/93603.html

上一篇: slow count(*) on innoDB

下一篇: When ordering by date desc, "Using temporary" slows down query