联合索引(多列索引)[通俗易懂]
聯(lián)合索引是指對(duì)表上的多個(gè)列進(jìn)行索引,聯(lián)合索引也是一棵B+樹,不同的是聯(lián)合索引的鍵值數(shù)量不是1,而是大于等于2.
最左匹配原則
假定上圖聯(lián)合索引的為(a,b)。聯(lián)合索引也是一棵B+樹,不同的是B+樹在對(duì)索引a排序的基礎(chǔ)上,對(duì)索引b排序。所以數(shù)據(jù)按照(1,1),(1,2)……順序排放。
對(duì)于selete * from table where a=XX and b=XX,顯然是可以使用(a,b)聯(lián)合索引的,
對(duì)于selete * from table where a=XX,也是可以使用(a,b)聯(lián)合索引的。因?yàn)樵谶@兩種情況下,葉子節(jié)點(diǎn)中的數(shù)據(jù)都是有序的。
但是,對(duì)于b列的查詢,selete * from table where b=XX。則不可以使用這棵B+樹索引。可以發(fā)現(xiàn)葉子節(jié)點(diǎn)的b值為1,2,1,4,1,2。顯然不是有序的,因此不能使用(a,b)聯(lián)合索引。
By the way:selete * from table where b=XX and a=XX,也是可以使用到聯(lián)合索引的,你可能會(huì)有疑問,這條語(yǔ)句并不符合最左匹配原則。這是由于查詢優(yōu)化器的存在,mysql查詢優(yōu)化器會(huì)判斷糾正這條sql語(yǔ)句該以什么樣的順序執(zhí)行效率最高,最后才生成真正的執(zhí)行計(jì)劃。所以,當(dāng)然是我們能盡量的利用到索引時(shí)的查詢順序效率最高咯,所以mysql查詢優(yōu)化器會(huì)最終以這種順序進(jìn)行查詢執(zhí)行。
優(yōu)化:在聯(lián)合索引中將選擇性最高的列放在索引最前面。
例如:在一個(gè)公司里以age 和gender為索引,顯然age要放在前面,因?yàn)樾詣e就兩種選擇男或女,選擇性不如age。
總結(jié)
以上是生活随笔為你收集整理的联合索引(多列索引)[通俗易懂]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cache_purge php
- 下一篇: CBoard框架使用总结一[通俗易懂]