mysql联合索引顺序调整_MySQL 关于联合索引的字段顺序规则讨论
聯(lián)合索引的順序,難道不是哪個(gè)查詢(xún)條件最多用就放在前面的嗎?
比如商品有三個(gè)分類(lèi)A,B,C,類(lèi)似「界門(mén)綱目科屬種」那樣,越左類(lèi)別越大。還有一個(gè)是商品來(lái)源D,不一定會(huì)用于查詢(xún)條件中。
舉個(gè)例子,A代表衣服,B代表衣服下的長(zhǎng)袖,C代表衣服下的紅色的長(zhǎng)袖。
如果這三個(gè)字段是商品的三個(gè)屬性,并且要建立索引的話,必然是A,B,C的順序,并且中間不應(yīng)該有比如D字段(商品來(lái)源)
因?yàn)榧僭O(shè)你的索引是這樣建立的D,A,B,C,那么當(dāng)你的查詢(xún)條件中沒(méi)有D字段的話,那么這個(gè)索引將不會(huì)被使用到。
假設(shè)2:索引是這樣建立的A,B,D,C,當(dāng)查詢(xún)語(yǔ)句為:
select * from goods where A='衣服' and B='長(zhǎng)袖' and C='紅色';
雖然會(huì)使用到這個(gè)索引,但是這個(gè)索引只用到了A,B,因?yàn)镈字段不作為查詢(xún)條件,所以C字段也沒(méi)有使用到。
這就是最左匹配原則的一種。
再多的,可以再去了解一下數(shù)據(jù)庫(kù)索引的數(shù)據(jù)結(jié)構(gòu),以及其他最左匹配原則,這里列一下。
假設(shè)有這樣一個(gè)索引——(a,b,c),針對(duì)下面的5個(gè)關(guān)于最左原則的解釋,做出舉例。
1.必須用到索引的第一個(gè)字段,如select * from table where b='b' and c='c',不會(huì)使用到索引。
2.對(duì)于索引的第一個(gè)字段,用like時(shí)左邊必須是固定值,通配符只能出現(xiàn)在右邊,如select * from table where a like '%a%'不會(huì)使用到索引,而select * from table where a like 'a%'則會(huì)使用到索引。
3.如果在字段前加了函數(shù)或在字段前嵌入了表達(dá)式,則不會(huì)使用索引。如select * from table where trim(a)>1不會(huì)使用索引,select * from table where a+1>1也不會(huì)使用索引,而select * from table where a>2會(huì)使用到索引。
4.索引的使用與where語(yǔ)句中字段出現(xiàn)的順序無(wú)關(guān),只與是否使用到索引相關(guān)字段有關(guān)。如select * from table where b='b' and a='a'也會(huì)使用索引。
5.使用到索引第一個(gè)字段的不等于表達(dá)式,即使其他字段不是索引字段也會(huì)使用到索引。如select * from table where a!='a' and ddd='ddd'會(huì)使用到索引。
上述引用文字來(lái)源于丁奇專(zhuān)欄《MySQL實(shí)戰(zhàn)45講》
總結(jié)
以上是生活随笔為你收集整理的mysql联合索引顺序调整_MySQL 关于联合索引的字段顺序规则讨论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 金橙子打标卡labview打标开发没头绪
- 下一篇: mysql取消mvvc机制_MySQL探