MySQl 解释 Extra "Using where" 的真正含义是什么?

What does MySQl explain Extra "Using where" really mean?

根据 MySQL documentation,使用 where 意味着:WHERE 子句用于限制匹配下一个 table 或发送给客户端的行。

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

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

我已经使用 MySQL 20 年了。

我一直是 MySQL 优化的顾问。

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

我与从事 MySQL 查询优化器代码工作的工程师交谈过,并特别询问他们“'Using where' 在 EXPLAIN 输出中意味着什么?”

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

还是看不懂

我目前认为 MySQL 报告 'Using where' 不一致。有时这意味着必须评估 WHERE 子句中的表达式,以便在索引搜索匹配要检查的行后为检查的行提供二次过滤。

但我相信有些查询不符合这个解释。其他时候它似乎只意味着 WHERE 子句有一个表达式,即使该表达式正在通过索引查找进行评估。

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

所以现在我只是忽略 'Using where'。当我尝试优化查询时,它不会指导我。我不能用它来通知我查询是 well-optimized 或 poorly-optimized.