如何通過(guò) explain 判斷二級(jí)索引是否消除回表操作
分析:
給定的 sql 查詢?cè)?idx_track_source_id_created_at_len_parse_result_list 索引上使用了索引查找。要判斷是否還存在回表操作,需要檢查 Extra 字段。
判斷標(biāo)準(zhǔn):
- 如果 Extra 中包含 using Index 或 Using Index Condition,則不需要回表。
- 如果 Extra 中包含 Using where 且未出現(xiàn) Using Index,則存在回表操作。
本例分析:
給定 explain 結(jié)果中,Extra 字段為 Using where; Using index; Using temporary; Using filesort,其中:
- Using index 表明使用了索引查找。
- Using where 表明需要根據(jù) WHERE 條件過(guò)濾結(jié)果。
因此,本示例中存在回表操作。這是因?yàn)樗饕采w了所需字段,但同時(shí)也需要根據(jù) WHERE 條件過(guò)濾數(shù)據(jù)。因此,mysql 需要從聚簇索引中檢索滿足條件的行。
結(jié)論:
通過(guò)檢查 explain 輸出中的 Extra 字段,可以判斷二級(jí)索引是否消除了回表操作。如果 Extra 中包含 Using Index 或 Using Index Condition,則不需要回表;否則,存在回表操作。