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

Jav*_*eta 7 mysql explain sql-execution-plan

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

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

在此输入图像描述

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

Bil*_*win 28

我从 2001 年起就开始使用 MySQL。

我一直担任 MySQL 优化顾问。

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

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

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

我还是无法理解。

我目前的看法是 MySQL 报告的“Using where”不一致。有时,这意味着在WHERE索引搜索匹配要检查的行之后,必须对子句中的表达式进行求值,以便为检查的行提供二次筛选。

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

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

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