深入了解MySQL中的組合索引,看看與單列索引的區別

本篇文章帶大家了解一下mysql中的組合索引,介紹一下創建、刪除組合索引的方法,聊聊組合索引陷阱、組合索引與單列索引的區別、組合索引使用場景,希望對大家有所幫助!

深入了解MySQL中的組合索引,看看與單列索引的區別

什么是組合索引

兩個或更多個列上的索引被稱作聯合索引,聯合索引又叫組合索引。【相關推薦:mysql視頻教程

例如索引是 key index (a,b,c) 可以支持 a | a,b| a,b,c 3 種組合進行查找,但不支持 b,c 進行查找。在使用的時候,a, c 組合也可以用,但實際上只用到了 a 的索引

深入了解MySQL中的組合索引,看看與單列索引的區別

創建組合索引

--?普通的組合索引 create?index?index_name?on?table_name?(column1,?column2,?...) --?組合要求唯一的索引,相比與上一種,多出了?【unique】關鍵字 create?unique?index?index_name?on?table_name?(column1,?column2,?...)

深入了解MySQL中的組合索引,看看與單列索引的區別

刪除組合索引

--?用法?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

單列索引陷阱

深入了解MySQL中的組合索引,看看與單列索引的區別

深入了解MySQL中的組合索引,看看與單列索引的區別

如圖所示,我們創建了 2 個索引,在 where 中使用 and 進行查詢是,從執行計劃里看只使用到了第一個條件上的索引,后續的索引直接被忽略掉

組合索引陷阱

如圖,現在建立組合索引 a,b,c

深入了解MySQL中的組合索引,看看與單列索引的區別

上圖的條件查詢為 b,a,c,mysql 會自動處理條件順序變為 a,b,c , 再使用定義好的組合索引

深入了解MySQL中的組合索引,看看與單列索引的區別

上圖的查詢條件是 b,a,同樣的,mysql 調整條件順序為 a,b,再走組合索引

深入了解MySQL中的組合索引,看看與單列索引的區別

上圖的查詢條件是 b,c,很明顯,由于沒有使用 a 作為條件列,導致 mysql 沒有使用組合索引

與單列索引的區別

聯合索引中列的順序非常重要,從左原則。

單個索引就是一個一個起作用,也就是說有三個單個索引,哪個條件查詢在前哪個起作用,其他不起作用。

組合索引使用場景

  • where 條件會經常出現的,并且當前表的數量比較大。

  • where 條件中是用 and 而非 or 的時候。

  • 聯合索引比單個索引更適合,因為索引占用一定磁盤空間,也就說明有一定的開銷,如果多個單個索引比較多,那么多資源的浪費也比較多,聯合索引相當于對多個列建索引,并且只建一次,and 條件下非常適合。

更多編程相關知識,請訪問:mysql視頻教程!!

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享