![](https://img.51dongshi.com/20241129/wz/18310455852.jpg)
聯合索引,作為MySQL中一種用于多個字段創建的索引,其核心在于提升查詢效率。面試中經常考察的點主要圍繞聯合索引的存儲結構、最左匹配原則、最左前綴法則,以及索引下推優化。下面,我們對聯合索引的幾個關鍵概念進行詳細解析。聯合索引存儲在B+樹結構中,且在InnoDB存儲引擎中,主鍵索引的葉子節點存儲實際數據,而非主鍵索引的葉子節點存儲主鍵ID。在創建聯合索引`CREATE INDEX idx ON table(A,B,C)`后,索引中包含了字段A、B、C的所有索引項。當查詢涉及多個索引項時,數據庫會遵循最左匹配原則,即從索引的第一列開始匹配,直到遇到不匹配項為止,這被稱為最左前綴法則。比如查詢`SELECT * FROM USER us WHERE us.age=20 AND us.money=30`,數據庫會先根據age字段進行排序,然后繼續處理money字段,從而確保查詢效率。最左前綴法則在聯合索引查詢中至關重要。若查詢語句跳過了索引中的部分列,如`SELECT * FROM user WHERE money=3 AND name='程序員fly'`,且查詢條件不涉及索引的第一個字段(age),則索引將無法有效利用,導致查詢性能下降。面試中,這往往是考察點之一。索引下推是MySQL5.6版本后引入的一項優化技術,旨在提升查詢性能。例如,在查詢`SELECT * FROM USER WHERE name LIKE '李%' AND age=20`時,索引下推技術允許數據庫先過濾掉age不等于20的數據,再進行回表查詢,從而減少回表率,顯著提高檢索速度。這種優化在處理包含通配符的查詢時特別有效。在實際應用中,應合理選擇聯合索引的字段順序。例如,對于需求查詢姓李的年齡20周歲男性用戶的相關信息,建立聯合索引`CREATE INDEX idx ON user(name, age)`時,考慮到性別字段區分度不大,建議將其后置,以免不必要的索引失效。MySQL5.6版本后引入的索引下推優化技術,有助于進一步提升查詢效率。在總結聯合索引知識的同時,持續學習和實踐是提升技術水平的關鍵。本文旨在幫助讀者更好地理解和應用聯合索引,以優化查詢性能。希望本文的分享能對您有所幫助,同時也歡迎關注個人公眾號“程序員fly”以獲取更多技術文章。如果您對MySQL有更多疑問或需要進一步學習,歡迎持續關注和探索。