切換語言為:簡體

通俗易懂的說明 MySQL 聯合索引和單個索引的區別以及應用場景

  • 爱糖宝
  • 2024-10-31
  • 2048
  • 0
  • 0

在MySQL中,聯合索引和單個索引都是爲了提高查詢效率,但它們的作用範圍和使用方法有所不同。通俗地講:

    •單個索引是針對一個列建立的索引,適合用在查詢條件中只有這個列的情況下。例如,如果我們有一個包含“姓名”和“年齡”的表,建立了“姓名”列的索引,那麼在查詢時使用“姓名=某某”的條件會加速查詢。

    •聯合索引是針對多個列組合在一起建立的索引,適合用於包含多個條件的查詢。比如在“姓名”和“年齡”這兩列上建立聯合索引,這樣在同時使用“姓名”和“年齡”作為條件時,查詢會更快。

舉個例子來說明

假設有一張使用者表 user,包含以下欄位:

通俗易懂的說明 MySQL 聯合索引和單個索引的區別以及應用場景

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;,聯合索引對這個查詢的加速效果不大,因為聯合索引會優先按照“姓名”來排序。

總結

    •單個索引更適合簡單查詢,查詢條件與索引列完全匹配時效果好。

    •聯合索引更適合複雜查詢,尤其是查詢條件涉及多個欄位時可以大大加速。

需要注意的是,建立聯合索引時應按照查詢中使用的欄位順序來排列,以確保索引能最大程度地發揮作用。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.