【问题标题】: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”。当我尝试优化查询时,它不会指导我。我不能用它来通知我查询是优化好还是优化不好。

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 2017-05-06
      • 2012-03-30
      • 2011-10-10
      • 2012-08-03
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多