b樹索引原理 考研計算機b 樹數(shù)據(jù)庫索引,一張數(shù)據(jù)頁能存儲多少個索引節(jié)點?
考研計算機b 樹數(shù)據(jù)庫索引,一張數(shù)據(jù)頁能存儲多少個索引節(jié)點?首先,從數(shù)據(jù)結構的角度。B-tree和B-tree之間最重要的區(qū)別之一是B-tree只有葉節(jié)點來存儲數(shù)據(jù),其他節(jié)點用于索引。B樹意味著每個索
考研計算機b 樹數(shù)據(jù)庫索引,一張數(shù)據(jù)頁能存儲多少個索引節(jié)點?
首先,從數(shù)據(jù)結構的角度。
B-tree和B-tree之間最重要的區(qū)別之一是B-tree只有葉節(jié)點來存儲數(shù)據(jù),其他節(jié)點用于索引。B樹意味著每個索引節(jié)點都有一個數(shù)據(jù)字段。這就決定了B-tree更適合存儲外部數(shù)據(jù),即所謂的磁盤數(shù)據(jù)。從MySQL(inoodb)的角度來看,使用B-tree作為索引。一般來說,索引量很大,尤其是關系數(shù)據(jù)庫,數(shù)據(jù)量大,可以達到1億級。因此,為了減少對內(nèi)存的占用,索引也會存儲在磁盤上。那么MySQL是如何衡量查詢效率的呢?磁盤IO次數(shù)。B樹(class-B-tree)的特點是每一層都有大量的節(jié)點和少量的層。其目的是減少磁盤IO時間。在查詢數(shù)據(jù)時,最好的方法是快速找到目標索引,讀取數(shù)據(jù),使用B-tree樹可以很好地完成這一目的,但是B-tree的每個節(jié)點都有一個數(shù)據(jù)字段(指針),這無疑增加了節(jié)點的大小。換言之,它增加了磁盤IO的數(shù)量(磁盤IO讀取的數(shù)據(jù)量是固定的,單個數(shù)據(jù)變大,每次讀取的數(shù)據(jù)數(shù)量變少,IO的數(shù)量增加,一個IO更耗時?。┰贐樹中,除了葉節(jié)點外,其他節(jié)點不存儲數(shù)據(jù)。如果節(jié)點較小,則磁盤IO的數(shù)量較少。這是優(yōu)點之一。另一個優(yōu)點是B樹的所有數(shù)據(jù)字段都在葉節(jié)點中。一般來說,進行優(yōu)化,即所有葉節(jié)點都用指針連接。這樣,所有的數(shù)據(jù)都可以通過遍歷葉節(jié)點獲得,從而可以進行間隔訪問。至于mongodb為什么使用B-tree而不是B-tree,我們可以從設計的角度來考慮。它不是傳統(tǒng)的關系型數(shù)據(jù)庫,而是以JSON格式存儲的NoSQL,具有高性能、高可用性和易于擴展的特點。首先,它擺脫了關系模型。上面提到的優(yōu)勢2并不那么強大。其次,MySQL使用B樹,數(shù)據(jù)都在葉子節(jié)點上,每個查詢都需要訪問葉子節(jié)點。Mongodb使用B樹,所有節(jié)點都有數(shù)據(jù)字段,只要找到指定的索引就可以訪問。毫無疑問,單次查詢的平均速度要比MySQL快(但從側(cè)面看,至少MySQL的平均查詢時差不大)。一般來說,MySQL選擇B-tree,mongodb根據(jù)自己的需要選擇B-tree。
為什么MySQL數(shù)據(jù)庫索引選擇使用B 樹?
MySQL索引數(shù)據(jù)結構,為什么先用B樹從數(shù)據(jù)結構的角度來回答。
B-tree和B-tree之間最重要的區(qū)別之一是B-tree只有葉節(jié)點來存儲數(shù)據(jù),其他節(jié)點用于索引。B樹意味著每個索引節(jié)點都有一個數(shù)據(jù)字段。這就決定了B-tree更適合存儲外部數(shù)據(jù),即所謂的磁盤數(shù)據(jù)。