聯合索引(複合索引)在B+樹上的結構

附上原文地址 :https://blog.csdn.net/klchht/article/details/78146443?locationNum=9&fps=1.net

感謝做者分享,本人最近看了好多關於說明索引和樹的關係的文章,都沒獲得想要的,經過看了這篇文章後纔對索引有了清晰的認識,blog

 

這裏以MySql INNODB爲例,MyISAM道理是同樣的。而後先從原文搬幾個圖過來:排序

這是一張表格,col1 是主建,col2和col3 是普通字段。那麼主索引 對應的 B+樹 結構是這樣子的:索引

 

也能夠是這樣子的,這是我畫的:io

 

如今呢,對col3 創建一個單列索引,原文圖:im

 

看完這個圖也是能夠理解的,那麼想法來了,若是對 col3 和 col2 創建 聯合索引,那麼 B+ 樹會是一個什麼樣子的呢?數據

首先能夠確定的是,確定只有一棵樹,又由於 最左原則的存在,那麼帶着這個想法本身試着畫了下:img

建索引語句 CREATE INDEX IDX_XXX ON TABLE(COL3, COL2);分享

先根據col3 排序,在根據 col2 排序,如上圖。co

原文例子中的數據沒有重複數據,爲了更好的理解,我本身改了下:

紅色框是改動的地方,把col3 改爲有重複數據了,而後 仍是對 col3 ,col2創建聯合索引,那麼 B+樹 以下:

紅色框是和原來不同的地方。

聯合索引在查找的時候,好比要找 Alice,34 這條記錄 WHERE COL3 = 'Alice' AND COL2 = 34

先根據col3 查找 Alice ,找到了2條記錄,在根據col2 查找 34,而後獲取到主鍵 15 ,在根據主鍵去查找 主索引。

若是 是 WHERE COL2 = 34,因爲只有聯合索引 (col3, col2),沒有col2 的單列索引。

那麼查找的時候,就無法根據上面的這棵樹來查找 ,只能全表掃描。

因此爲何會有最左原則,就是由於 B+樹 是根據最左邊的字段構建的,個人想法是這樣子的。

若是不對,必定要幫忙批評指正啊。

相關文章
相關標籤/搜索