MySQL 為什麼使用B 樹做索引結構

2021-10-25 05:25:23 字數 668 閱讀 1162

官方:索引是幫助mysql高效獲取資料的排好序的資料結構

mysql底層索引用的並不是完全的b樹,而是在b樹上做了一些改進得到的變種,也就是b+樹。

非葉子節點不儲存data,只儲存索引(冗餘),可以放置更多的索引

葉子節點包含所有索引字段

葉子節點用雙向指標連線,提高區間訪問的效能

橫向可以儲存更多的元素,而且是有序排列的,儲存同樣 高度小很多。

如何結算b+樹的高度 等於3所有元素放滿, b+可以放多少個索引元素

1.可以使用命令查詢mysql設定乙個節點的大小 :16kb

2.為什麼不直接把所有的索引放在同乙個節點上?

一次性load到記憶體中,數量越大io越慢

記憶體不夠

折中方案:b+高度和節點大小取乙個合適的配置

高度等於3的b+ 樹全部放滿, 葉子節點可以放2000w+的索引。

把b+樹根節點一般是常駐記憶體的,mysql啟動時會load

就高一些的版本, 會把非葉子都load到記憶體,只要合理的走了索引,查詢時只需要做一次io互動即可,效率非常高

MySQL為什麼選擇B 樹做索引

b tree的基本概念 所有的葉子節點的高度都是一樣,這個保證了每次查詢資料的時候都是穩定的查詢效率,不會因為運氣的影響 b tree中其實每個非葉子節點內的小節點內其實都是乙個二元組 key,data key其實就是下圖的那個25這種的,然後這個data其實對應的就是資料庫中id等於25這條完整的...

mysql 為什麼用B 樹做索引

平衡二叉樹,2 3 4樹,紅黑樹都是平衡的,為什麼不能用來做innodb的索引呢?索引是存在於索引檔案中,是存在於磁碟中的,索引通常是很大的,因此無法一次將全部索引載入到記憶體當中,每次只能從磁碟中讀取乙個磁碟頁的資料到記憶體中,磁碟的讀取速度較記憶體中的讀取速度而言是差了好幾個級別的 邏輯結構上相...

mysql為什麼用b 樹做索引

關鍵字就是key的意思 1 定義任意非葉子結點最多只有m個兒子,且m 2 2 根結點的兒子數為 2,m 3 除根結點以外的非葉子結點的兒子數為 m 2,m 4 每個結點存放至少m 2 1 取上整 和至多m 1個關鍵字 至少2個關鍵字 5 非葉子結點的關鍵字個數 指向兒子的指標個數 1 6 非葉子結點...