溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中的組合索引與單列索引的區(qū)別有哪些

發(fā)布時間:2021-11-04 09:44:34 來源:億速云 閱讀:505 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“MySQL中的組合索引與單列索引的區(qū)別有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

MySQL中的組合索引與單列索引的區(qū)別有哪些

什么是組合索引

兩個或更多個列上的索引被稱作聯(lián)合索引,聯(lián)合索引又叫組合索引。【相關(guān)推薦:mysql視頻教程】

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

MySQL中的組合索引與單列索引的區(qū)別有哪些

創(chuàng)建組合索引

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

MySQL中的組合索引與單列索引的區(qū)別有哪些

刪除組合索引

-- 用法 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中的組合索引與單列索引的區(qū)別有哪些

MySQL中的組合索引與單列索引的區(qū)別有哪些

如圖所示,我們創(chuàng)建了 2 個索引,在 where 中使用 and 進(jìn)行查詢是,從執(zhí)行計劃里看只使用到了第一個條件上的索引,后續(xù)的索引直接被忽略掉

組合索引陷阱

如圖,現(xiàn)在建立組合索引 a,b,c

MySQL中的組合索引與單列索引的區(qū)別有哪些

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

MySQL中的組合索引與單列索引的區(qū)別有哪些

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

MySQL中的組合索引與單列索引的區(qū)別有哪些

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

與單列索引的區(qū)別

聯(lián)合索引中列的順序非常重要,從左原則。

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

組合索引使用場景

  • where 條件會經(jīng)常出現(xiàn)的,并且當(dāng)前表的數(shù)量比較大。

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

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

“MySQL中的組合索引與單列索引的區(qū)別有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI