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

Mysql 为什么选择count(*)不在数据库中使用索引,而在另一个数据库中使用索引?,mysql,indexing,Mysql,Indexing,两个表都使用innodb引擎 产品环境:选择不使用索引的计数(*) 版本:5.7.14-google-log 开发环境:使用索引选择计数(*) 版本:5.7.18-0ubuntu0.16.04.1 有人能解释一下这种情况吗?好吧,这两种解释都不能说明全部情况 在InnoDB中,选择COUNT(*)而不选择,其中必须执行索引扫描。优化器将选择“最小”索引,在您的情况下,它是主键 “使用索引”与上述声明一致。但在您意识到表是由PK聚集在其中的数据组成之前,这是一种误导 “选择优化的表”通常意味着

两个表都使用innodb引擎

产品环境:选择不使用索引的计数(*)

版本:5.7.14-google-log

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

版本:5.7.18-0ubuntu0.16.04.1


有人能解释一下这种情况吗?

好吧,这两种解释都不能说明全部情况

在InnoDB中,
选择COUNT(*)
而不选择
,其中
必须执行索引扫描。优化器将选择“最小”索引,在您的情况下,它是
主键

“使用索引”与上述声明一致。但在您意识到表是由PK聚集在其中的数据组成之前,这是一种误导

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

我假设这里没有
视图

还要注意的是,谷歌可能已经做了一些改变。我怀疑Ubuntu实际上采用了5.7.18

另一个问题。。。在较新的版本中(我不知道什么时候),MySQL不再让
解释
“优化”