gpt4 book ai didi

mysql - 为什么 select count(*) 不使用数据库中的索引而使用另一个数据库中的索引?

转载 作者:行者123 更新时间:2023-11-29 17:13:27 25 4
gpt4 key购买 nike

两个表都使用innodb引擎

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

enter image description here

版本:5.7.14-google-log

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

enter image description here

版本:5.7.18-0ubuntu0.16.04.1

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

最佳答案

嗯,EXPLAIN 都没有讲述整个故事。

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

“使用索引”同意上面的说法。但这是一种误导,直到您意识到该表是由其中聚集了 PK 的数据组成的。

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

我假设这里没有涉及VIEW

另请注意,Google 可能做出了一些更改。我怀疑 Ubuntu 实际上按原样采用了 5.7.18。

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

关于mysql - 为什么 select count(*) 不使用数据库中的索引而使用另一个数据库中的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com