在MySQL执行计划中看到"Using where"并不一定意味着存在回表操作,这两者是不同的概念。
"Using where"表示MySQL服务器在存储引擎检索行后,需要对这些行进行额外的过滤条件检查。这通常发生在:
回表操作(Bookmark Lookup)是指: - 当使用二级索引查询时,索引中不包含查询所需的所有列 - 需要根据索引找到的主键值回到聚簇索引中查找完整记录
在EXPLAIN结果中,判断回表操作的依据是:
1. 查看type
列:如果是ref
、range
等使用非聚簇索引的情况
2. 查看Extra
列:如果有"Using index"表示覆盖索引(无回表),没有则表示可能需要回表
3. 查看查询的列:如果查询的列不在使用的索引中,通常需要回表
"Using where"仅表示有额外的过滤条件,而回表是数据访问路径的问题。两者可以同时出现,但没有必然联系。要判断是否有回表,应该主要看查询的列是否都被索引覆盖。