mysql的聯合索引(復合索引)的實現
聯合索引
本文中聯合索引的定義為(MySQL):
ALTER TABLE `table_name` ADD INDEX (`col1`,`col2`,`col3`);
聯合索引的優點
若多個一條SQL,需要多個用到兩個條件
SELECT * FROM `user_info` WHERE username='XX',password='XXXXXX';
當索引在檢索 password
字段的時候,數據量大大縮小,索引的命中率減小,增大瞭索引的效率。
符合索引的索引體積比單獨索引的體積要小,而且隻是一個索引樹,相比單獨列的索引要更加的節省時間復雜度和空間復雜度
聯合索引命中的本質(最左匹配的理解)
定義
當創建(col1
,col2
,col3
)聯合索引時,相當於創建瞭(col
)單列索引,(clo1
,clo2
)聯合索引以及(col1
,col2
,col3
)聯合索引想要索引生效,隻能使用col1
和col1
,col2
和col1
,col2
,col3
三種組合;當然,col1
,col3
組合也可以,但實際上隻用到瞭col1
的索引,col3
並沒有用到!
圖解
通俗理解
聯合索引相當於一個按照姓氏——名字
的一個電話簿,隻能先確定姓氏才可以命中索引,下列可以正確命中聯合索引的語句( =
和IN
直接的字段都可以亂序,MySQL的查詢優化器可以優化成索引識別的形式)
-- 隻命中 col1,col2 SELECT * FROM `table_name` WHERE `col1`='XX';
-- 命中col1,col2。col1,col2的順序可以顛倒 SELECT * FROM `table_name` WHERE `clo1`='XX',`clo2`='XXX'; SELECT * FROM `table_name` WHERE `clo2`='XXX', `clo1`='XX';
-- 命中col1,col2,col3,同理,三個列的順可以顛倒 SELECT * FROM `table_name` WHERE `col1`='X',`col2`='XX',`col3`='XXX'; SELECT * FROM `table_name` WHERE `col1`='X',`col3`='XX',`col2`='XXX'; SELECT * FROM `table_name` WHERE `col2`='X',`col3`='XX',`col1`='XXX';
到此這篇關於mysql的聯合索引(復合索引)的實現的文章就介紹到這瞭,更多相關mysql 聯合索引 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!