为什么选择count(*)在另一个数据库中使用索引时不使用数据库中的索引?

时间:2018-08-09 09:18:23

标签: mysql indexing

两个表都使用innodb引擎

产品环境:不使用索引选择count(*)

enter image description here

版本:5.7.14-Google日志

开发环境:使用索引选择count(*)

enter image description here

版本:5.7.18-0ubuntu0.16.04.1

有人可以解释这种情况吗?

1 个答案:

答案 0 :(得分:0)

好吧,EXPLAIN都没有讲完整的故事。

在InnoDB中,没有SELECT COUNT(*)的{​​{1}}必须进行索引扫描。优化程序将选择“最小”索引,在您的情况下为WHERE

“使用索引”与以上陈述相同。但这会误导您,直到您意识到表是由其中包含PK的数据组成的。

“选择经过优化的表”通常意味着PRIMARY KEY执行子查询,而不是简单地告诉您它要做什么。 (如果子查询花费很长时间,则EXPLAIN的速度可能会很慢。)

我认为这里不涉及EXPLAIN吗?

还请注意,Google可能已进行了一些更改。我怀疑Ubuntu几乎照样使用了5.7.18。

另一个问题...在较新的版本中(我不知道何时),MySQL停止让VIEWs“优化”。