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

exdqitrt  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(351)

两个表都使用innodb引擎

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


版本:5.7.14-google-log

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


版本:5.7.18-0ubuntu0.16.04.1
有人能解释一下这种情况吗?

watbbzwu

watbbzwu1#

嗯,也不是 EXPLAIN 是在讲述整个故事。
在innodb中, SELECT COUNT(*) 没有一个 WHERE 必须进行索引扫描。优化器将选择“最小的”索引,在您的情况下是 PRIMARY KEY .
“使用指数”与上述说法一致。但在您意识到表是由pk聚集在其中的数据组成之前,这是一种误导。
“select tables optimized away”通常的意思是 EXPLAIN 执行子查询,而不是简单地告诉您它将要做什么(这可能会很慢 EXPLAIN 如果子查询需要很长时间。)
我想没有 VIEWs 这里有人吗?
还要注意的是,谷歌可能已经做了一些改变。我怀疑ubuntu实际使用了5.7.18。
另一个问题。。。在较新的版本中(我不知道什么时候),mysql停止让 EXPLAIN “优化离开”。

相关问题