比如商品有三個分類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