資料庫索引為什麼要用 B+ 樹而不用紅黑樹呢?
AVL 樹和紅黑樹這些二叉樹結構的資料結構可以達到最高的查詢效率這是毋庸置疑的。
既然如此,那麼資料庫索引為什麼不用 AVL 樹或者紅黑樹呢?
這就牽扯到一個問題了,不考慮每種資料結構的前提條件而選擇資料結構都是在耍流氓。
AVL 數和紅黑樹基本都是儲存在記憶體中才會使用的資料結構,那磁碟中會有什麼不同呢?
這就要牽扯到磁碟的儲存原理了
作業系統讀寫磁碟的基本單位是扇區,而檔案系統的基本單位是簇(Cluster)。
也就是說,磁碟讀寫有一個最少內容的限制,即使我們只需要這個簇上的一個位元組的內容,我們也要含著淚把一整個簇上的內容讀完。
那麼,現在問題就來了
一個父節點只有 2 個子節點,並不能填滿一個簇上的所有內容啊?那多餘的內容豈不是要浪費了?我們怎麼才能把浪費的這部分內容利用起來呢?哈哈,答案就是 B+ 樹。
由於 B+ 樹分支比二叉樹更多,所以相同數量的內容,B+ 樹的深度更淺,深度代表什麼?代表磁碟 io 次數啊!資料庫設計的時候 B+ 樹有多少個分支都是按照磁碟一個簇上最多能放多少節點設計的啊!
所以,涉及到磁碟上查詢的資料結構,一般都用 B+ 樹啦。
相關推薦
資料庫索引為什麼要用 B+ 樹而不用紅黑樹呢?
AVL 樹和紅黑樹這些二叉樹結構的資料結構可以達到最高的查詢效率這是毋庸置疑的。 既然如此,那麼資料庫索引為什麼不用 AVL 樹或者紅黑樹呢? 這就牽扯到一個問題了,不考慮每種資料結構的前提條件而選擇資料結構都是在耍流氓。 AVL 數和紅黑樹基本都是儲存在記憶體中才會使用
資料庫為什麼要用B+樹結構--MySQL索引結構的實現
為什麼使用B+樹?言簡意賅,就是因為: 1.檔案很大,不可能全部儲存在記憶體中,故要儲存到磁碟上 2.索引的結構組織要儘量減少查詢過程中磁碟I/O的存取次數(為什麼使用B-/+Tree,還跟磁碟存取原理有關。) 3.區域性性原理與磁碟預讀,預讀的長度一般為頁(page)的整
資料庫為什麼要用B+樹結構-
B+樹在資料庫中的應用 { 為什麼使用B+樹?言簡意賅,就是因為: 1.檔案很大,不可能全部儲存在記憶體中,故要儲存到磁碟上 2.索引的結構組織要儘量減少查詢過程中磁碟I/O的存取次數(為什麼使用B-/+Tree,還跟磁碟存取原理有關。) 3.區域性性原理與磁碟預讀,預讀
揭祕!為何要用_beginthreadex,而不用CreateThread和_beginthread
由於歷史原因,所以C/C++執行庫並不是為多執行緒應用程式而設計的,所以為了保證其中的某些變數和函式的安全,那麼必須建立一個數據結構,並使之與使用了C/C++執行庫函式的每個執行緒所關聯。當在呼叫C/C++執行庫函式時,那些函式必須讀取主調自己的執行緒的資料塊,
資料結構之重要樹總結(紅黑樹、B/B+樹等)
眾所周知,二叉樹在資料結構中的分量舉足輕重。之所以分量如此重,是因為在實際中有很多情況用此資料結構會產生很多好處。本文主要對二叉搜尋樹、平衡二叉樹、紅黑樹、B(B+、B*)樹進行總結,因為這幾種樹的概
B樹和二叉排序樹(如紅黑樹)、B樹和B+樹的區別
B樹是為了提高磁碟或外部儲存裝置查詢效率而產生的一種多路平衡查詢樹。 B+樹為B樹的變形結構,用於大多數資料庫或檔案系統的儲存而設計。 B樹相對於紅黑樹的區別 在大規模資料儲存的時候,紅黑樹往往出現由於樹的深度過大而造成磁碟IO讀寫過於頻繁,進而導致效率低下的情況
資料結構中常見的樹(BST二叉搜尋樹、AVL平衡二叉樹、RBT紅黑樹、B-樹、B+樹、B*樹)
BST樹 即二叉搜尋樹: 1.所有非葉子結點至多擁有兩個兒子(Left和Right); 2.所有結點儲存一個關鍵字; 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹; 如:
二叉查詢樹(BST),平衡二叉查詢樹(AVL),紅黑樹(RBT),B~/B+樹(B-tree)的比較
http://www.iteye.com/topic/614070 此少俠總結的特棒,直接收藏了。 我們這個專題介紹的動態查詢樹主要有: 二叉查詢樹(BST),平衡二叉查詢樹(AVL),紅黑樹(RBT),B~/B+樹(B-tree)。這四種樹都具備下面幾個優勢: (1) 都
一步一圖一程式碼,一定要讓你真正徹底明白紅黑樹(平衡二叉樹)
一步一圖一程式碼,一定要讓你真正徹底明白紅黑樹 作者:July 二零一一年一月九日 ----------------------------- 本文參考: I、 The Art of Computer Programming Volume I II、 I
一步一圖一程式碼,一定要讓你真正徹底明白紅黑樹 (July演算法!!!)
情況5: 兄弟S為黑色,S 的左兒子是紅色,S 的右兒子是黑色,而N是它父親的左兒子。//此種情況,最後轉化到下面的情況6。 [對應我第二篇文章中,情況3:x的兄弟w是黑色的,w的左孩子是紅色,w的右孩子是黑色。] void delete_case5(struct node *n) { str
圖解集合7:紅黑樹概念、紅黑樹的插入及旋轉操作詳細解讀
集合 得到 2個 排序。 數據流 except boolean 修正 split 原文地址http://www.cnblogs.com/xrq730/p/6867924.html,轉載請註明出處,謝謝! 初識TreeMap 之前的文章講解了兩種Map,分別是HashMa
3、如何判斷一棵樹是否是紅黑樹?
假設 隊列 als 前序 紅黑樹 truct lse -s ron 一、紅黑樹的定義 紅黑樹是每個節點都帶有顏色屬性的二叉查找樹,顏色或紅色或黑色。除了二叉查找樹強制的一般要求以外,對於任何有效的紅黑樹有如下的額外要求: 性質1. 節點是紅色或黑色。 性質2. 根節
演算法導論 第十三章:紅黑樹 筆記(紅黑樹的性質、旋轉、插入、刪除)
紅黑樹(red-black tree) 是許多“平衡的”查詢樹中的一種,它能保證在最壞情況下,基本的動態集合操作的時間為O(lgn) 。 紅黑樹的性質: 紅黑樹是一種二叉查詢樹,但在每個結點上增加一個儲存位表示結點的顏色,可以是RED或BLACK 。通過對任何一條從根到葉子的路徑上各個結
紅黑樹旋轉的通俗易懂版本以及判斷一個樹是否為紅黑樹
紅黑樹屬於二叉搜尋樹,但是每個節點增加了一個存顏色的位,它的規則是: 1.根節點為黑色。 2.不能有連續的兩個紅節點,所以如果一個節點的顏色為紅,那麼它的子節點若不為空則一定為紅。 3.每條路徑上黑節點
二叉查詢樹BST和紅黑樹,果然。。。
學習、長進、總結 二叉查詢樹Binary Search Tree。 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;
資料結構和演算法(Golang實現)(30)查詢演算法-2-3-4樹和普通紅黑樹
文章首發於 閱讀更友好的GitBook。 2-3-4樹和普通紅黑樹 某些教程不區分普通紅黑樹和左傾紅黑樹的區別,直接將左傾紅黑樹拿來教學,並且稱其為紅黑樹,因為左傾紅黑樹與普通的紅黑樹相比,實現起來較為簡單,容易教學。在這裡,我們區分開左傾紅黑樹和普通紅黑樹。 紅黑樹是一種近似平衡的二叉查詢樹,從2-3樹或2
Mysql索引為什麼用B+樹而不用B-樹
先從資料結構的角度來看 我們知道B-樹和B+樹最重要的一個區別就是B+樹只有葉節點存放資料,其餘節點用來索引,而B-樹是每個索引節點都會有Data域。 這就決定了B+樹更適合用來儲存外部資料,也就是所謂的磁碟資料。 從Mysql(Inoodb)的角度來看 B+樹是用來充當索引的,一般來說索引非常大
為什麼MySQL資料庫要用B+樹儲存索引?
要回答好這個問題,首先我們要弄懂什麼是索引?索引常見的資料結構有哪些?這些資料結構有何優缺點?只有弄懂這些,再去比較,才會知道為啥要用B+樹作為MySQL資料庫的儲存索引了。 一、索引是什麼? MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取資料的資料結構。它的本質就是
【漫畫】為什麼MySQL資料庫要用B+樹儲存索引?
小史是一個應屆生,雖然學的是電子專業,但是自己業餘時間看了很多網際網路與程式設計方面的書,一心想進BAT網際網路公司。 話說兩個多月前,小史通過了A廠的一面,兩個多月後的今天,小史終於等到了A廠的二面。 簡單的自我介紹後,面試官看了看小史的簡歷,開始發問了。 【面試現場】
為什麼Mysql用B+樹做索引而不用B-樹或紅黑樹
B+樹只有葉節點存放資料,其餘節點用來索引,而B-樹是每個索引節點都會有Data域。所以從Mysql(Inoodb)的角度來看,B+樹是用來充當索引的,一般來說索引非常大,尤其是關係性資料庫這種資料量大的索引能達到億級別,所以為了減少記憶體的佔用,索引也會被儲存