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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM