如何通过 explain 判断二级索引是否消除回表操作
分析:
给定的 sql 查询在 idx_track_source_id_created_at_len_parse_result_list 索引上使用了索引查找。要判断是否还存在回表操作,需要检查 Extra 字段。
判断标准:
- 如果 Extra 中包含 using Index 或 Using Index Condition,则不需要回表。
- 如果 Extra 中包含 Using where 且未出现 Using Index,则存在回表操作。
本例分析:
给定 explain 结果中,Extra 字段为 Using where; Using index; Using temporary; Using filesort,其中:
- Using index 表明使用了索引查找。
- Using where 表明需要根据 WHERE 条件过滤结果。
因此,本示例中存在回表操作。这是因为索引覆盖了所需字段,但同时也需要根据 WHERE 条件过滤数据。因此,mysql 需要从聚簇索引中检索满足条件的行。
结论:
通过检查 explain 输出中的 Extra 字段,可以判断二级索引是否消除了回表操作。如果 Extra 中包含 Using Index 或 Using Index Condition,则不需要回表;否则,存在回表操作。