【问题标题】:What does MySQl explain Extra "Using where" really mean?MySQl 解释 Extra “Using where” 的真正含义是什么?
【发布时间】:2020-11-06 20:58:21
【问题描述】:
根据MySQL documentation,使用 where 意味着:WHERE 子句用于限制哪些行与下一个表匹配或发送到客户端。
据我了解,这意味着如果您的 sql 语句具有 where 条件,则“使用 where”将出现在您的解释额外信息中。虽然根据我的经验,这似乎意味着 MySQL 存储引擎发现索引无法覆盖某些列,并且必须检索行数据。例如:
谁能解释一下Using where的真正含义吗?
【问题讨论】:
标签:
mysql
sql-execution-plan
explain
【解决方案1】:
我已经使用 MySQL 20 年了。
我一直是 MySQL 优化的顾问。
我已经开发并提供了有关查询优化的 MySQL 培训和会议演示,包括解释 EXPLAIN 输出。
我与从事 MySQL 查询优化器代码工作的工程师交谈过,并专门询问他们“'Using where' 在 EXPLAIN 输出中的含义是什么?”
我自己尝试过阅读 MySQL 代码(我确实知道如何读写 C 代码)。
我还是看不懂。
我目前的看法是 MySQL 不一致地报告“Using where”。有时这意味着必须评估 WHERE 子句中的表达式,以便在索引搜索匹配要检查的行之后为检查的行提供二次过滤。
但我相信有些查询不符合这种解释。其他时候,它似乎只意味着 WHERE 子句有一个表达式,即使该表达式正在通过索引查找进行评估。
我怀疑查询优化器中有不同的代码路径,它们使用不同的条件输出“Using where”。但我没有证据。
所以现在我只是忽略“使用 where”。当我尝试优化查询时,它不会指导我。我不能用它来通知我查询是优化好还是优化不好。