回覆列表
-
1 # 美好34619
-
2 # 牽你的手陪我到老
索引最左匹配原則
建立聯合索引時會遵循最左匹配原則,即最左優先,在檢索數據時從聯合索引的最左邊開始匹配
例如:
為user表中的name、address、phone列添加聯合索引
ALTER TABLE user ADD INDEX index_three(name,address,phone);所以,下面的三個SQL語句都可以命中索引
SELECT * FROM user WHERE address = ‘北京’ AND phone = ‘12345’ AND name = ‘張三’;
SELECT * FROM user WHERE name = ‘張三’ AND address = ‘北京’;
SELECT * FROM user WHERE name = ‘張三’;
這三條SQL語句在檢索時分別會使用以下索引進行數據匹配(name,address,phone) (name,address) (name)
索引字段出現的順序可以是任意的,MySQL優化器會幫我們自動的調整where條件中的順序
如果聯合索引中最左邊的列不在查詢條件中,則不會命中索引
SELECT * FROM user WHERE address = ‘北京’ ;
索引本質是一棵B+Tree,聯合索引(col1, col2,col3)也是。其非葉子節點存儲的是第一個關鍵字的索引,而葉節點存儲的則是三個關鍵字col1、col2、col3三個關鍵字的數據,且按照col1、col2、col3的順序進行排序。
聯合索引(年齡, 姓氏,名字),葉節點上data域存儲的是三個關鍵字的數據。且是按照年齡、姓氏、名字的順序排列的。
而最左原則的原理就是,因為聯合索引的B+Tree是按照第一個關鍵字進行索引排列的。