索引的本質(zhì)是什么?
- 索引是幫助mysql高效獲取數(shù)據(jù)的排好序的數(shù)據(jù)結(jié)構(gòu)
- 索引的數(shù)據(jù)結(jié)構(gòu)有“二叉樹”,“紅黑樹”,“Hash表”,“B-Tree”
為什么索引使用的是B-Tree
- 如果使用二叉樹作為數(shù)據(jù)結(jié)構(gòu),而某一個(gè)數(shù)據(jù)列剛好是單邊增長(zhǎng),那么二叉樹將會(huì)逐漸變成一個(gè)鏈表。當(dāng)對(duì)這個(gè)數(shù)據(jù)列執(zhí)行查詢時(shí),相當(dāng)于沒有使用索引,因?yàn)殒湵淼膬?yōu)勢(shì)在于插入和刪除,而查詢是非常慢的。
- B-Tree葉節(jié)點(diǎn)具有相同的深度
- B-Tree葉節(jié)點(diǎn)的指針為空
- 節(jié)點(diǎn)中的數(shù)據(jù)索引從左到右遞增排列
B+Tree(B-Tree變種)
- 非葉子節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),只存儲(chǔ)索引,可以放更多的索引
- 順序訪問指針,提高區(qū)間訪問的性能
mysql的索引使用的是什么數(shù)據(jù)庫結(jié)構(gòu)?
- 使用的B+樹
- B+樹的高扇出性,導(dǎo)致樹的層高一般在2~4層,也就是說查詢某一個(gè)鍵值只需要2~4次IO操作就可以。
- B+樹是高度平衡的,葉子節(jié)點(diǎn)中順序存放所有數(shù)據(jù)。
聚集索引
- 聚集索引是按照每張表的主鍵構(gòu)造一個(gè)B+樹,同時(shí)葉子節(jié)點(diǎn)中存放的就是整張表的行記錄數(shù)據(jù)。葉子節(jié)點(diǎn)也稱為數(shù)據(jù)頁。聚集索引能夠非??斓尼槍?duì)范圍值查詢數(shù)據(jù)。