組合索引未生效:理解查詢列對索引使用的影響
在 mysql 中,使用組合索引可以顯著提升特定查詢的性能。然而,有時組合索引可能無法生效,這可能是由查詢的列決定的。
讓我們考慮給定的問題:
該查詢按 c 和 b 列查找記錄。在表中,有一個組合索引覆蓋這兩種列。然而,執行 explain 時,sql 優化器未使用索引,而是選擇了全表掃描 (all)。
原因在于該查詢中使用了 select *,它將檢索所有列(包括未包含在組合索引中的列),這迫使數據庫回表以獲取這些列的數據。回表會導致索引失效,因為需要掃描整個表來獲取所需數據。
要解決此問題,可以修改查詢以僅選擇所需的列:
EXPLAIN SELECT b, c FROM combine_indx WHERE c = 3 and b = 4
登錄后復制
通過只選擇b 和c 列,查詢不再需要回表,因此組合索引可以生效,這將導致索引查找(index) 而不是全表掃描(all) 的執行計劃。