91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

說說B+ Tree

發布時間:2020-05-22 00:38:46 來源:網絡 閱讀:8208 作者:coveringindex 欄目:MySQL數據庫

先看下B+ Tree數據結構的特點(From Wikipedia).

1. The primary value of a B+ tree is in storing data for efficient retrieval in a block-oriented storage context - in particular, filesystems.


2. B+ trees have very high fanout(number of pointers to child nodes in a node, typically on the order of 100 or more), which reduces the number of I/O operations required to find an element in the tree.


對于第2點, 看看下圖, 每個結點都含有指向下一層的指針, 指針越多, 意味著樹的高度就越矮, 即在塊設備(常見的就是磁盤)中檢索數據, 需要的I/O次數也就越少.

說說B+ Tree


MySQL中, 不同的存儲引擎, 使用B+ Tree數據結構, 形成了各自存儲數據的方式. 對于InnoDB存儲引擎來說, 是Clustered index(聚簇索引)的存儲方式, (在Oracle中叫索引組織表, 即index-organized table). 在MyISAM存儲引擎中, 就是堆表的存儲方式. 下圖可以較直觀的反應兩者數據的組織方式.

說說B+ Tree


左上方圖聚簇索引中,

a. 非葉子結點存儲的是, <Primary key, Pointer>.

b. 葉子結點存儲的是, 一行行記錄.


左下方圖二級索引中,

a. 非葉子結點儲存的是, <Key, Pointer>.

b. 葉子結點存儲的是, <Key, Primary key>.


右圖索引結構中,

a. 非葉子結點存儲的是, <Key,Pointer>.

b. 葉子結點存儲的是, <Pointer>, 其指向記錄.


下面看看B+ Tree數據結構的efficient retrieval和high fanout特點, 在InnoDB存儲引擎中是如何體現的. 以左上圖為例, 假設使用Bigint數據類型(8Bytes)作為主鍵, 一條記錄大小為400Bytes, Page大小為16K, 那么索引樹高度為1, 2, 3層時, 存儲的記錄有多少(注, Pointer大小為6Bytes).

說說B+ Tree


現在普通的SAS盤, 一秒鐘也可以完成200次I/O, 從千萬量級的數據中, 檢索一條記錄, 只要3次I/O, 即0.015秒就行了, 可見效率之高, 又加之目前一般使用的SSD盤, 最少也要再快50倍.



最后看看兩種數據存儲方式的優缺點.

1. 觀察第二幅圖片, 在InnoDB存儲引擎中使用二級索引檢索數據時, 由于其葉子結點存儲的是<Key, Primary key>, 在獲取到Primary key時, 還要去查看聚簇索引, 即回表操作, 才能獲取到記錄. 而在MyISAM存儲引擎中, 主鍵索引和二級索引具有同等地位(只不過主鍵索引值非空), 檢索數據時, 無需回表. 也許從該點來說MyISAM存儲引擎更適合查詢.


2. 對于DML操作, 一條記錄從400Bytes變更到600, 若不能原地更新的話, 在MyISAM存儲引擎中, 索引葉子結點存儲的是指向記錄的指針, 相比InnoDB存儲引擎來說, 其變動會更大些. 也許從該點來說InnoDB存儲引擎更適合變更. 當然了, 兩者為了預防非原地更新產生的影響, 都會在Page中預留空洞.


若感興趣可關注訂閱號”數據庫最佳實踐”(DBBestPractice).

說說B+ Tree

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

若尔盖县| 渝中区| 肥西县| 潜江市| 迁安市| 攀枝花市| 镇雄县| 大足县| 建平县| 黄冈市| 门头沟区| 淮滨县| 和政县| 伊金霍洛旗| 防城港市| 土默特右旗| 南康市| 子洲县| 托克逊县| 锡林郭勒盟| 平江县| 清新县| 鹤壁市| 桐庐县| 洪洞县| 安国市| 富平县| 普安县| 胶南市| 清徐县| 麦盖提县| 资源县| 珲春市| 德钦县| 辉县市| 交城县| 重庆市| 穆棱市| 岗巴县| 永泰县| 万源市|