阿龙的学习笔记--- B-树和B+树 以及 MySQL的索引机制总结
-
B-樹和B+樹原理詳解:https://blog.csdn.net/ywlmsm1224811/article/details/97890446
-
深入理解MySQL索引之B+Tree: 寫得好!InnoDB和MyISEM的區(qū)別也很清楚。https://blog.csdn.net/b_x_p/article/details/86434387
-
MySQL索引詳解:寫得超詳細(xì)。https://blog.csdn.net/IT_10/article/details/95488179
-
MyISAM和InnoDB的區(qū)別:超詳細(xì)https://blog.csdn.net/helloxiaozhe/article/details/88601028
-
B-樹和B+樹區(qū)別:
- b+樹的中間節(jié)點(diǎn)不保存數(shù)據(jù),(一般一個節(jié)點(diǎn)大小為一個磁盤頁) 所以磁盤頁能容納更多節(jié)點(diǎn)元素,更“矮胖”;
- b+樹查詢必須查找到葉子節(jié)點(diǎn),b樹只要匹配到即可不用管元素位置,因此b+樹查找更穩(wěn)定;
- 葉子節(jié)點(diǎn)之間有指針,鏈?zhǔn)健τ诜秶檎襾碚f,b+樹只需遍歷葉子節(jié)點(diǎn)鏈表即可。
-
為啥最終選擇了B+樹作為MySQL的結(jié)構(gòu):
B+Tree是B TREE的變種,B TREE能解決的問題,B+TREE也能夠解決(降低樹的高度,增大節(jié)點(diǎn)存儲數(shù)據(jù)量)
B+Tree掃庫和掃表能力更強(qiáng)。如果我們要根據(jù)索引去進(jìn)行數(shù)據(jù)表的掃描,對B TREE進(jìn)行掃描,需要把整棵樹遍歷一遍,而B+TREE只需要遍歷他的所有葉子節(jié)點(diǎn)即可(葉子節(jié)點(diǎn)之間有引用)。
B+TREE磁盤讀寫能力更強(qiáng)。他的根節(jié)點(diǎn)和支節(jié)點(diǎn)不保存數(shù)據(jù)區(qū),所以根節(jié)點(diǎn)和支節(jié)點(diǎn)同樣大小的情況下,保存的關(guān)鍵字要比B TREE要多。而葉子節(jié)點(diǎn)不保存子節(jié)點(diǎn)引用,能用于保存更多的關(guān)鍵字和數(shù)據(jù)。所以,B+TREE讀寫一次磁盤加載的關(guān)鍵字比B TREE更多。
B+Tree排序能力更強(qiáng)。上面的圖中可以看出,B+Tree天然具有排序功能。
B+Tree查詢性能穩(wěn)定。B+Tree數(shù)據(jù)只保存在葉子節(jié)點(diǎn),每次查詢數(shù)據(jù),查詢IO次數(shù)一定是穩(wěn)定的。當(dāng)然這個每個人的理解都不同,因?yàn)樵贐 TREE如果根節(jié)點(diǎn)命中直接返回,確實(shí)效率更高。
總結(jié)
以上是生活随笔為你收集整理的阿龙的学习笔记--- B-树和B+树 以及 MySQL的索引机制总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝电商:淘宝卖家如何快速提升店铺自然搜
- 下一篇: Redis修行 — 基数统计:Hyper