區別核心:聯合索引可加速多個字段組合查詢,單列索引只能加速一個字段。
🔹聯合索引(復合索引)
INDEX(col1, col2, col3)
-
適用范圍:
-
WHERE col1 = ...
? -
WHERE col1 = ... AND col2 = ...
? -
WHERE col1 = ... AND col2 = ... AND col3 = ...
? -
WHERE col2 = ...
? 不命中(跳過前綴) -
WHERE col1 = ... AND col3 = ...
? 也不命中
-
-
優勢:
-
一次命中多個字段,節省多次回表。
-
如果查詢字段包含索引中所有字段(覆蓋索引),可避免回表。
-
🔹單列索引
分別建:
INDEX(col1)
INDEX(col2)
INDEX(col3)
-
適用范圍:
-
WHERE col1 = ...
? -
WHERE col2 = ...
? -
WHERE col1 = ... AND col2 = ...
→ 需要 MySQL 多索引合并,效率不如聯合索引。
-
?總結:
區別 | 聯合索引 | 單列索引 |
---|---|---|
優化多字段查詢 | ? 高效,順序影響生效 | ? 弱,依賴合并算法 |
順序要求 | ? 有嚴格的最左匹配原則 | ? 無順序要求 |
存儲空間 | 占空間更少 | 多個索引重復記錄更多 |
回表次數 | ? 可減少回表(覆蓋索引) | ? 查詢字段多時需回表多次 |
結論:
-
多字段常組合查詢 → 聯合索引
-
單字段經常獨立查詢 → 單列索引
-
查詢中字段順序固定 → 聯合索引優先
-
字段組合不定 → 分別建單列索引(必要時)