本篇文章帶大家了解一下mysql中的組合索引,介紹一下創建、刪除組合索引的方法,聊聊組合索引陷阱、組合索引與單列索引的區別、組合索引使用場景,希望對大家有所幫助!
什么是組合索引
兩個或更多個列上的索引被稱作聯合索引,聯合索引又叫組合索引。【相關推薦:mysql視頻教程】
例如索引是 key index (a,b,c) 可以支持 a | a,b| a,b,c 3 種組合進行查找,但不支持 b,c 進行查找。在使用的時候,a, c 組合也可以用,但實際上只用到了 a 的索引
創建組合索引
--?普通的組合索引 create?index?index_name?on?table_name?(column1,?column2,?...) --?組合要求唯一的索引,相比與上一種,多出了?【unique】關鍵字 create?unique?index?index_name?on?table_name?(column1,?column2,?...)
刪除組合索引
--?用法?1 drop?index?index_name?on?talbe_name --?用法?2 alter?table?table_name?drop?index?index_name --?用法?3,對?2?的包裝 alter?table?table_name?drop?primary?key
單列索引陷阱
如圖所示,我們創建了 2 個索引,在 where 中使用 and 進行查詢是,從執行計劃里看只使用到了第一個條件上的索引,后續的索引直接被忽略掉
組合索引陷阱
如圖,現在建立組合索引 a,b,c
上圖的條件查詢為 b,a,c,mysql 會自動處理條件順序變為 a,b,c , 再使用定義好的組合索引
上圖的查詢條件是 b,a,同樣的,mysql 調整條件順序為 a,b,再走組合索引
上圖的查詢條件是 b,c,很明顯,由于沒有使用 a 作為條件列,導致 mysql 沒有使用組合索引
與單列索引的區別
聯合索引中列的順序非常重要,從左原則。
單個索引就是一個一個起作用,也就是說有三個單個索引,哪個條件查詢在前哪個起作用,其他不起作用。
組合索引使用場景
-
where 條件會經常出現的,并且當前表的數量比較大。
-
where 條件中是用 and 而非 or 的時候。
-
聯合索引比單個索引更適合,因為索引占用一定磁盤空間,也就說明有一定的開銷,如果多個單個索引比較多,那么多資源的浪費也比較多,聯合索引相當于對多個列建索引,并且只建一次,and 條件下非常適合。
更多編程相關知識,請訪問:mysql視頻教程!!