MySQl解释Extra“Using where”到底是什么意思?

问题描述 投票:0回答:2

根据MySQL文档,使用where意味着:WHERE子句用于限制哪些行与下一个表匹配或发送到客户端。

据我了解,这意味着如果你的sql语句有where条件,你的解释中会出现一个“Using where”的额外信息。根据我的经验,这似乎意味着 MySQL 存储引擎发现索引无法覆盖某些列,并且必须检索行数据。例如:

谁能解释一下Using where的真正含义吗?

mysql sql-execution-plan explain
2个回答
21
投票

我从 2001 年就开始使用 MySQL。

我一直担任MySQL优化顾问。

我开发并提供了有关查询优化的 MySQL 培训和会议演示,包括解释 EXPLAIN 输出。

我与从事 MySQL 查询优化器代码工作的工程师交谈过,并具体询问了他们“EXPLAIN 输出中的

'Using where'
是什么意思?”

我尝试自己阅读MySQL代码(我确实知道如何读写C代码)。

我还是看不懂。

我目前的看法是,MySQL 报告的“Using where”不一致。有时,这意味着必须评估

WHERE
子句中的表达式,以便在索引搜索匹配要检查的行后为检查的行提供二次过滤。

但我相信有些查询不符合这个解释。其他时候,它似乎只意味着

WHERE
子句有一个表达式,即使该表达式正在通过索引查找进行评估。

怀疑查询优化器中只是存在不同的代码路径,使用不同的条件输出“Using where”。但我没有证据。

所以现在我只是忽略“使用位置”。当我尝试优化查询时它不会指导我。我无法用它来通知我查询优化良好或优化不佳。


0
投票

在Mysql 8.0中,它在额外字段中返回

Using index condition
。解释在这里。这意味着除非有必要,否则 Mysql 会推迟读取全表行。

https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-extra-information:~:text=使用%20index%20条件,it%20is%20necessary.

© www.soinside.com 2019 - 2024. All rights reserved.