1. 程式人生 > 其它 >MySQL 關於聯合索引的欄位順序規則

MySQL 關於聯合索引的欄位順序規則

比如商品有三個分類A,B,C,類似「界門綱目科屬種」那樣,越左類別越大。還有一個是商品來源D,不一定會用於查詢條件中。

舉個例子,A代表衣服,B代表衣服下的長袖,C代表衣服下的紅色的長袖。

如果這三個欄位是商品的三個屬性,並且要建立索引的話,必然是A,B,C的順序,並且中間不應該有比如D欄位(商品來源)

因為假設你的索引是這樣建立的D,A,B,C,那麼當你的查詢條件中沒有D欄位的話,那麼這個索引將不會被使用到。

假設2:索引是這樣建立的A,B,D,C,當查詢語句為:

select * from goods where A='衣服' and B='長袖' and C='紅色';

雖然會使用到這個索引,但是這個索引只用到了A,B,因為D欄位不作為查詢條件,所以C欄位也沒有使用到。

這就是 最左匹配原則 的一種。

再多的,可以再去了解一下資料庫索引的資料結構,以及其他最左匹配原則,這裡列一下。

假設有這樣一個索引——(a,b,c),針對下面的5個關於最左原則的解釋,做出舉例。

1.必須用到索引的第一個欄位,如select * from table where b='b' and c='c',不會使用到索引。

2.對於索引的第一個欄位,用like時左邊必須是固定值,萬用字元只能出現在右邊,如select * from table where a like '%a%'不會使用到索引,而select * from table where a like 'a%'則會使用到索引。

3.如果在欄位前加了函式或在欄位前嵌入了表示式,則不會使用索引。如select * from table where trim(a)>1不會使用索引,select * from table where a+1>1也不會使用索引,而select * from table where a>2會使用到索引。

4.索引的使用與where語句中欄位出現的順序無關,只與是否使用到索引相關欄位有關。如select * from table where b='b' and a='a'也會使用索引。

5.使用到索引第一個欄位的不等於表示式,即使其他欄位不是索引欄位也會使用到索引。如select * from table where a!='a' and ddd='ddd'會使用到索引。
————————————————
版權宣告:本文為CSDN博主「左瑤」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_30069591/article/details/113300253