這篇文章帶大家了解一下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中的組合索引,看看與單列索引的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!