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