前幾天面試被問到了,沒答好,記錄一下: 首先說紅黑樹為什么不行: 1.紅黑樹必須存在內存里的,數據庫表太大了,存不進去。 2.即使你找到了把紅黑樹存進硬盤的方法,紅黑樹查找一個節點最多要查logN層,每一層都是一個內存頁(雖然你只是想找一個節點,但硬盤必須一次讀一個頁。。),那么一共logN ...
紅黑樹是二叉樹,而B樹可以大於 個節點,這使得B樹高度小 高度小,意味着IO小,因為要不斷的根據指針找下一個節點 而外存的IO速度你懂得吧,越少越好 其次,由於局部性原理,以下是引用 即使只需要一個字節,磁盤也會從這個位置開始,順序向后讀取一定長度的數據放入內存。這樣做的理論依據是計算機科學中著名的局部性原理: 當一個數據被用到時,其附近的數據也通常會馬上被使用。 紅黑二叉樹,每根據指針尋找下一個 ...
2019-05-26 23:29 0 486 推薦指數:
前幾天面試被問到了,沒答好,記錄一下: 首先說紅黑樹為什么不行: 1.紅黑樹必須存在內存里的,數據庫表太大了,存不進去。 2.即使你找到了把紅黑樹存進硬盤的方法,紅黑樹查找一個節點最多要查logN層,每一層都是一個內存頁(雖然你只是想找一個節點,但硬盤必須一次讀一個頁。。),那么一共logN ...
B樹: B+樹 1) B+-tree的磁盤讀寫代價更低 B+-tree的內部結點並沒有指向關鍵字具體信息的指針。因此其內部結點相對B 樹更小。如果把所有同一內部結點的關鍵字存放在同一盤塊中,那么盤塊所能容納的關鍵字數量也越多。一次性讀入 ...
前面幾篇關於數據庫底層磁盤文件讀取,數據庫索引實現細節進行了深入的研究,但是沒有串聯起來的講解為什么數據庫索引會采用B樹和B+樹而不是其他的數據結構,例如平衡二叉樹、鏈表等,因此,本文打算從數據庫文件存儲以及讀取說起,講解數據庫索引的由來。 我們以拋出問題的形式開始講解 ...
一、 引言 對數據庫索引的關注從未淡出我的們的討論,那么數據庫索引是什么樣的?分哪些類型?索引的存儲是怎樣的?聚集索引與非聚集索引有什么不同? 二、B-Tree 我們常見的數據庫系統,其索引使用的數據結構多是B ...
數據結構和算法(Data Structure Visualizations):https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 一、MySQL索引底層的實現 索引是幫助MySQL高效獲取數據的排好序的數據 ...
數據庫索引詳解 索引 當我們在設計數據庫的時候,對表的一些屬性有時會加上索引,但索引為什么能提高檢索速率呢?是不是用了索引就一定可以提高效率呢?不同索引之間有什么區別呢?搞懂這些問題是靈活運用索引的必備條件。接下來,我們將一 一進行討論。 一.索引的本質 索引也分為不同的種類,而且也有 ...
數據結構相對來說比較枯燥, 我盡量用最易懂的話,來把B樹講清楚。學過數據結構的人都接觸過一個概念----二叉樹。簡單來說,就是每個父節點最多有兩個子節點。為了在二叉樹上更快的進行元素的查找,人們通過不斷的改進,從而設計出一種高效搜索的樹----平衡二叉查找樹,也就是這個樣子: 平衡二叉查找樹 ...
問題1.數據庫為什么要設計索引?索引類似書本目錄,用於提升數據庫查找速度。問題2.哈希(hash)比樹(tree)更快,索引結構為什么要設計成樹型?加快查找速度的數據結構,常見的有兩類:(1)哈希,例如HashMap,查詢/插入/修改/刪除的平均時間復雜度都是O(1);(2)樹,例如平衡二叉搜索樹 ...