官方:索引是幫助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 非葉子結點...