插件窝 干货文章 Explain 分析结果显示“Using where”,这是否意味着查询存在回表操作?

Explain 分析结果显示“Using where”,这是否意味着查询存在回表操作?

索引 查询 Using 操作 360    来源:    2025-03-30

分析"Using where"与回表操作的关系

在MySQL执行计划中看到"Using where"并不一定意味着存在回表操作,这两者是不同的概念。

"Using where"的含义

"Using where"表示MySQL服务器在存储引擎检索行后,需要对这些行进行额外的过滤条件检查。这通常发生在:

  1. 查询条件中的某些列没有合适的索引
  2. 使用了索引列但需要进一步筛选
  3. 使用了函数或表达式导致索引失效

回表操作的含义

回表操作(Bookmark Lookup)是指: - 当使用二级索引查询时,索引中不包含查询所需的所有列 - 需要根据索引找到的主键值回到聚簇索引中查找完整记录

如何判断是否有回表

在EXPLAIN结果中,判断回表操作的依据是: 1. 查看type列:如果是refrange等使用非聚簇索引的情况 2. 查看Extra列:如果有"Using index"表示覆盖索引(无回表),没有则表示可能需要回表 3. 查看查询的列:如果查询的列不在使用的索引中,通常需要回表

结论

"Using where"仅表示有额外的过滤条件,而回表是数据访问路径的问题。两者可以同时出现,但没有必然联系。要判断是否有回表,应该主要看查询的列是否都被索引覆盖。