資料庫索引為什麼B樹結構

2021-08-03 12:04:34 字數 1839 閱讀 8361

這是乙個很深的問題,我採用逐步問答的方式來解答。試圖用最簡潔的語言解決整體概念上的問題。

本文目的純粹是提供對「索引採用b樹結構」這個問題的一種入門概念,不涉及深入的東西。

資料庫索引為什麼會選擇b樹結構?

答:因為使用b樹查詢時,所用的磁碟io操作次數比平衡二叉樹更少,效率也更高。

為什麼使用b樹查詢所用的磁碟io操作次數比平衡二叉樹更少?

答:大規模資料儲存中,樹節點儲存的元素數量是有限的(如果元素數量非常多的話,查詢就退化成節點內部的線性查詢了),這樣導致二叉查詢樹結構由於樹的高度過大而造成磁碟i/o讀寫過於頻繁,進而導致查詢效率低下。那麼我們就需要減少樹的高度以提高查詢效率。而平衡多路查詢樹結構b樹就滿足這樣的要求。b樹的各種操作能使b樹保持較低的高度,從而達到有效減少磁碟io操作次數。

什麼是b樹?b樹有什麼特徵?

答:一棵度為m(也稱為m階,m為給定數)的b-樹,它滿足:

(1)每個結點的子結點個數≤m;

(2)根結點若不是葉子結點,它至少有兩個子結點;

(3)除根和葉子結點外,每個結點的子結點個數≥   ceil(m/2);(注:ceil為向上取整函式)

(4)所有的葉子結點都出現在同一層,而且不帶有資訊;

(5)非葉子結點若具有j+1個子結點,那麼它包含j個關鍵字。其中,j≤m-1。

b樹的查詢是如何實現的?

答:在給定的m階b樹中查詢乙個給定值v相等的關鍵字,必須從根結點開始進行查詢。

b樹應用於檔案系統的動態索引結構,這些結點儲存於外部儲存裝置上。當乙個結點從外存調入記憶體後,我們可就這個結點的關鍵字序列,使用順序查詢(m較小時),或使用二分查詢( m較大時)。

假若當前被查詢的結點中有j個關鍵字,那麼,在查詢等於給定值v的關鍵字時,會有如下可能:

(1)若v==ki (1≤i≤j),則查詢成功。

(2)若v < k1  ,則

① 如果p0為空,那麼查詢失敗;

② 如果p0非空,那麼從外訪問得p0所指的結點,再繼續進行查詢。

(3)若ki

① 如果pi為空,那麼查詢失敗;

② 如果pi非空,那麼從外訪問得pi所指的結點,再繼續進行查詢。

(4)若kj

① 如果pj為空,那麼查詢失敗;

② 如果pj非空,那麼從外訪問得pj所指的結點,再繼續進行查詢。

既然查詢效率與樹的高度緊密相關,那麼b樹的高度由什麼決定?

答:若n≥1,m≥3,則對任意一棵具有n個關鍵字的m階b樹,其樹高h至多為:logt((n+1)/2)+1。

這裡t是每個(除根外)內部結點的最小度數,即b-樹的高度為o(logtn)。

給個b樹效能分析具體例子唄?

答:首先須知:n個結點的二叉平衡的高度h(即lgn)比b樹的高度h約大lgt倍,t為b樹內部結點的最小度數ceil(m/2)。

若階m=1024,則lgt=lg512=9。此時若b樹高度為4,則平衡的二叉排序樹的高度約為36。顯然,若m越大,則b樹高度越小。

若要作為記憶體中的查詢表,b樹的表現還要比二叉平衡樹好嗎?

答:非也。若要作為記憶體中的查詢表,b樹卻不一定比平衡的二叉排序樹好,尤其當m較大時更是如此。

因為查詢等操作的cpu計算時間在b樹上是o(mlogtn)=o(lgn·(m/lgt)), 而m/lgt>1,所以m較大時o(mlogtn)比平衡的二叉排序樹上相應操作的時間o(lgn)大得多。

因此,僅在記憶體中使用的b樹必須取較小的m。(通常取最小值m=3,此時b樹中每個內部結點可以有2或3個孩子,這種3階的b樹稱為2-3樹)。

資料庫索引為什麼使用B 樹?

b tree 二叉樹 binary tree 每個節點只能儲存乙個數。b tree b樹 b tree,並不是b 減 樹,橫槓為連線符,容易被誤導 b樹屬於多叉樹又名平衡多路查詢樹。每個節點可以多個數 由磁碟大小決定 b tree和b tree都是 b tree的變種 一般來說,索引本身也很大,不可...

資料庫索引為什麼使用B 樹

首先,紅黑樹乙個節點存乙個索引,雖然能提公升查詢的效率,但是o log2 n 的優化有限,對於大量資料而言,樹高決定了io的次數還是比較多 b 樹相比b樹,非葉子節點只存索引和下一節點指標,而少了關鍵字具體資訊的指標,所以節點比較小。在一次io操作下,讀取到的資料塊中,索引key更多,相對來說,進行...

資料庫為什麼要用B 樹結構

為什麼使用b 樹?言簡意賅,就是因為 1.檔案很大,不可能全部儲存在記憶體中,故要儲存到磁碟上 2.索引的結構組織要儘量減少查詢過程中磁碟i o的訪問次數 為什麼使用b tree,還跟磁碟訪問原理有關。3.區域性性原理與磁碟預讀,預讀的長度一般為頁 page 的整倍數,在許多作業系統中,頁得大小通常...