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
结合使用)的情况。
下一篇: When ordering by date desc, "Using temporary" slows down query