聯(lián)合索引

本文預(yù)計(jì)分為兩個(gè)部分:

(1)聯(lián)合索引部分的基礎(chǔ)知識(shí)

在這個(gè)部分绊起,我們溫習(xí)一下聯(lián)合索引的基礎(chǔ)

(2)聯(lián)合索引部分的實(shí)戰(zhàn)題

在這個(gè)部分掂碱,列舉幾個(gè)我認(rèn)為算是實(shí)戰(zhàn)中的代表題啊研,挑出來(lái)說(shuō)說(shuō)者祖。

正文

基礎(chǔ)

講聯(lián)合索引眶痰,一定要扯最左匹配!放心恍飘,我不扯有的沒(méi)的榨崩,幾句話懂個(gè)大概就行!

最左匹配

所謂最左原則指的就是如果你的 SQL 語(yǔ)句中用到了聯(lián)合索引中的最左邊的索引章母,那么這條 SQL 語(yǔ)句就可以利用這個(gè)聯(lián)合索引去進(jìn)行匹配母蛛,值得注意的是,當(dāng)遇到范圍查詢(>乳怎、<彩郊、between、like)就會(huì)停止匹配蚪缀。

假設(shè)焦辅,我們對(duì)(a,b)字段建立一個(gè)索引,也就是說(shuō)椿胯,你where后條件為

a=1a=1and b =2

是可以匹配索引的筷登。但是要注意的是~你執(zhí)行

b=2and a =1

也是能匹配到索引的,因?yàn)镸ysql有優(yōu)化器會(huì)自動(dòng)調(diào)整a,b的順序與索引順序一致哩盲。

相反的前方,你執(zhí)行

b=2

就匹配不到索引了。

而你對(duì)(a,b,c,d)建立索引,where后條件為

a =1andb =2andc >3andd =4

那么廉油,a,b,c三個(gè)字段能用到索引惠险,而d就匹配不到。因?yàn)橛龅搅朔秶樵儯?/p>

最左匹配的原理抒线?

假設(shè)班巩,我們對(duì)(a,b)字段建立索引,那么入下圖所示

如圖所示他們是按照a來(lái)進(jìn)行排序嘶炭,在a相等的情況下抱慌,才按b來(lái)排序逊桦。

因此,我們可以看到a是有序的1抑进,1强经,2,2寺渗,3匿情,3。而b是一種全局無(wú)序信殊,局部相對(duì)有序狀態(tài)!

什么意思呢炬称?

從全局來(lái)看,b的值為1涡拘,2玲躯,1,4鲸伴,1府蔗,2,是無(wú)序的汞窗,因此直接執(zhí)行b = 2這種查詢條件沒(méi)有辦法利用索引姓赤。

從局部來(lái)看,當(dāng)a的值確定的時(shí)候仲吏,b是有序的不铆。例如a = 1時(shí),b值為1裹唆,2是有序的狀態(tài)誓斥。當(dāng)a=2時(shí)候,b的值為1,4也是有序狀態(tài)许帐。

因此劳坑,你執(zhí)行a = 1 and b = 2是a,b字段能用到索引的。而你執(zhí)行a > 1 and b = 2時(shí)成畦,a字段能用到索引距芬,b字段用不到索引。因?yàn)閍的值此時(shí)是一個(gè)范圍循帐,不是固定的框仔,在這個(gè)范圍內(nèi)b值不是有序的,因此b字段用不上索引拄养。

綜上所示离斩,最左匹配原則,在遇到范圍查詢的時(shí)候,就會(huì)停止匹配跛梗。

實(shí)戰(zhàn)

OK寻馏,懂上面的基礎(chǔ),我們就可以開(kāi)始扯了~我舉了經(jīng)典的五大題型茄袖,看完基本就懂操软!

題型一

如果sql為

SELECT*FROMtableWHEREa =1andb =2andc =3;

如何建立索引?

如果此題回答為對(duì)(a,b,c)建立索引嘁锯,那都可以回去等通知了宪祥。

此題正確答法是,(a,b,c)或者(c,b,a)或者(b,a,c)都可以家乘,重點(diǎn)要的是將區(qū)分度高的字段放在前面蝗羊,區(qū)分度低的字段放后面。像性別仁锯、狀態(tài)這種字段區(qū)分度就很低耀找,我們一般放后面。

例如假設(shè)區(qū)分度由大到小為b,a,c业崖。那么我們就對(duì)(b,a,c)建立索引野芒。在執(zhí)行sql的時(shí)候,優(yōu)化器會(huì) 幫我們調(diào)整where后a,b,c的順序双炕,讓我們用上索引狞悲。

題型二

如果sql為

SELECT*FROMtableWHEREa >1andb =2;

如何建立索引?

如果此題回答為對(duì)(a,b)建立索引,那都可以回去等通知了妇斤。

此題正確答法是摇锋,對(duì)(b,a)建立索引。如果你建立的是(a,b)索引站超,那么只有a字段能用得上索引荸恕,畢竟最左匹配原則遇到范圍查詢就停止匹配。

如果對(duì)(b,a)建立索引那么兩個(gè)字段都能用上死相,優(yōu)化器會(huì)幫我們調(diào)整where后a,b的順序融求,讓我們用上索引。

題型三

如果sql為

SELECT*FROM`table`WHEREa >1andb =2andc >3;

如何建立索引?

此題回答也是不一定算撮,(b,a)或者(b,c)都可以生宛,要結(jié)合具體情況具體分析。

拓展一下

SELECT*FROM`table`WHEREa =1andb =2andc >3;

怎么建索引钮惠?嗯茅糜,大家一定都懂了!

題型四

SELECT*FROM`table`WHEREa =1ORDERBYb;

如何建立索引素挽?

這還需要想蔑赘?一看就是對(duì)(a,b)建索引,當(dāng)a = 1的時(shí)候,b相對(duì)有序缩赛,可以避免再次排序耙箍!

那么

SELECT*FROM`table`WHEREa >1ORDERBYb;

如何建立索引?

對(duì)(a)建立索引酥馍,因?yàn)閍的值是一個(gè)范圍辩昆,這個(gè)范圍內(nèi)b值是無(wú)序的,沒(méi)有必要對(duì)(a,b)建立索引旨袒。

拓展一下

SELECT*FROM`table`WHEREa =1ANDb =2ANDc >3ORDERBYc;

怎么建索引?

題型五

SELECT*FROM`table`WHEREaIN(1,2,3)andb >1;

如何建立索引汁针?

還是對(duì)(a,b)建立索引砚尽,因?yàn)镮N在這里可以視為等值引用施无,不會(huì)中止索引匹配,所以還是(a,b)!

拓展一下

SELECT*FROM`table`WHEREa =1ANDbIN(1,2,3)ANDc >3ORDERBYc;

如何建立索引必孤?此時(shí)c排序是用不到索引的猾骡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敷搪,隨后出現(xiàn)的幾起案子兴想,更是在濱河造成了極大的恐慌,老刑警劉巖赡勘,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫂便,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡狮含,警方通過(guò)查閱死者的電腦和手機(jī)顽悼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)几迄,“玉大人蔚龙,你說(shuō)我怎么就攤上這事∮承玻” “怎么了木羹?”我有些...
    開(kāi)封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)解孙。 經(jīng)常有香客問(wèn)我坑填,道長(zhǎng),這世上最難降的妖魔是什么弛姜? 我笑而不...
    開(kāi)封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任脐瑰,我火速辦了婚禮,結(jié)果婚禮上廷臼,老公的妹妹穿的比我還像新娘苍在。我一直安慰自己绝页,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布寂恬。 她就那樣靜靜地躺著续誉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪初肉。 梳的紋絲不亂的頭發(fā)上酷鸦,一...
    開(kāi)封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音牙咏,去河邊找鬼臼隔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛眠寿,可吹牛的內(nèi)容都是我干的躬翁。 我是一名探鬼主播焦蘑,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盯拱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了例嘱?” 一聲冷哼從身側(cè)響起狡逢,我...
    開(kāi)封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拼卵,沒(méi)想到半個(gè)月后奢浑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腋腮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年雀彼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片即寡。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徊哑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聪富,到底是詐尸還是另有隱情莺丑,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布墩蔓,位于F島的核電站梢莽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奸披。R本人自食惡果不足惜昏名,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阵面。 院中可真熱鬧轻局,春花似錦份殿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至夫壁,卻和暖如春拾枣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盒让。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工梅肤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邑茄。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓姨蝴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肺缕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子左医,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容