數據庫為什么要使用B+樹


今天看了幾篇文章,自己總結一下。

數據庫使用B+樹肯定是為了提升查找效率。

但是具體如何提升查找效率呢?

查找數據,最簡單的方式是順序查找。但是對於幾十萬上百萬,甚至上億的數據庫查詢就很慢了。

所以要對查找的方式進行優化,熟悉的二分查找,二叉樹可以把速度提升到O(log(n,2)),查詢的瓶頸在於樹的深度,最壞的情況要查找到二叉樹的最深層,由於,每查找深一層,就要訪問更深一層的索引文件。在多達數G的索引文件中,這將是很大的開銷。所以,盡量把數據結構設計的更為‘矮胖’一點就可以減少訪問的層數。在眾多的解決方案中,B-/B+樹很好的適合。B-樹定義具體可以查閱,簡而言之就是中間節點可以多余兩個子節點,而且中間的元素可以是一個域。相比B-樹,B+樹的父節點也必須存在於子節點中,是其中最大或者最小元素,B+樹的節點只存儲索引key值,具體信息的地址存在於葉子節點的地址中。這就使以頁為單位的索引中可以存放更多的節點。減少更多的I/O支出。因此,B+樹成為了數據庫比較優秀的數據結構,MySQL中MyIsAM和InnoDB都是采用的B+樹結構。不同的是前者是非聚集索引,后者主鍵是聚集索引,所謂聚集索引是物理地址連續存放的索引,在取區間的時候,查找速度非常快,但同樣的,插入的速度也會受到影響而降低。聚集索引的物理位置使用鏈表來進行存儲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM