【问题标题】:slow count(*) on innoDBinnoDB 上的慢计数(*)
【发布时间】:2012-07-15 09:14:01
【问题描述】:

我有一个表 message_message 有 3000000 条记录。

当我进行 count(*) 查询时,速度很慢...:

mysql>select count(*) from message_message;

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

|计数(*) |

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

| 2819416 |

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

一组中的 1 行(2 分 35.35 秒)

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

|编号 |选择类型|表|类型 |可能的键 |关键 | key_len |参考 |行 |额外 |

| 1 |简单 | message_message |索引 |空 |初级 | 4 |空 | 2939870 |使用索引 |

集合中的 1 行(0.02 秒)

发生了什么?

【问题讨论】:

标签: mysql performance count


【解决方案1】:

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

如果您使用 where 子句,尽管它会更改执行模式以使用索引,因此通常 InnoDB 在完全不受限制的计数上会比 MyISAM 慢,而性能在受限计数上匹配。

【讨论】:

  • 这是不正确的;在 MyISAM 中,它读取单个存储值;在 innodb 中,它会进行全索引读取(不是全表扫描)(这正是链接帖子所说的)
【解决方案2】:

如果要统计记录数,最好查询整个表,使用结果集的num_rows属性。 Count(...) 通常在您想要进行聚合查询时使用(与 GROUP BY 结合使用)。

【讨论】:

  • 这并不能真正回答问题。
猜你喜欢
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多