在MySQL中,聯合索引和單個索引都是爲了提高查詢效率,但它們的作用範圍和使用方法有所不同。通俗地講:
•單個索引是針對一個列建立的索引,適合用在查詢條件中只有這個列的情況下。例如,如果我們有一個包含“姓名”和“年齡”的表,建立了“姓名”列的索引,那麼在查詢時使用“姓名=某某”的條件會加速查詢。
•聯合索引是針對多個列組合在一起建立的索引,適合用於包含多個條件的查詢。比如在“姓名”和“年齡”這兩列上建立聯合索引,這樣在同時使用“姓名”和“年齡”作為條件時,查詢會更快。
舉個例子來說明
假設有一張使用者表 user,包含以下欄位:
1. 單個索引的情況
假設我們對“姓名”建立了單個索引:
CREATE INDEX idx_name ON user(name);
這樣當我們執行查詢 SELECT * FROM user WHERE name = '張三'; 時,因為“姓名”列有索引,MySQL 可以快速定位到“張三”對應的記錄。但是,如果查詢條件變為 SELECT * FROM user WHERE name = '張三' AND age = 25;,單個“姓名”索引對“年齡”列是沒有幫助的,MySQL 可能仍然需要掃描大量資料才能找到符合條件的記錄。
2. 聯合索引的情況
假如我們建立了一個聯合索引,包含“姓名”和“年齡”:
CREATE INDEX idx_name_age ON user(name, age);
這個聯合索引不僅可以加速SELECT * FROM user WHERE name = '張三' AND age = 25;的查詢,還能加速SELECT * FROM user WHERE name = '張三';的查詢。但如果我們查詢SELECT * FROM user WHERE age = 25;,聯合索引對這個查詢的加速效果不大,因為聯合索引會優先按照“姓名”來排序。
總結
•單個索引更適合簡單查詢,查詢條件與索引列完全匹配時效果好。
•聯合索引更適合複雜查詢,尤其是查詢條件涉及多個欄位時可以大大加速。
需要注意的是,建立聯合索引時應按照查詢中使用的欄位順序來排列,以確保索引能最大程度地發揮作用。