雜湊,二叉樹,紅黑樹,B樹,B+樹,LSM樹等資料結構做索引比較
雜湊索引
雜湊索引:hash索引的隨機查詢的時間複雜度為O(1).可以一次定位。索引hash索引的查詢效率很高,但是弊端就是對於單個查詢比如等值查詢很方便。因為雜湊索引比較的就是就行hash運算後的hash值。但是如果是範圍查詢,雜湊過後的hash值和要查詢的範圍大部分情況下是不連續的,所以會慢。
二叉樹索引
二叉樹索引:二叉樹不適合做索引結構,二叉樹做索引結構樹的高度會越來越高,索引單邊增長。會導致查詢時間複雜度為O(n)。尤其是二叉樹不平衡的時候深度可達到N。則複雜度為O(n)。mysql每次查詢索引隨著高度增加,那麼查詢磁碟的次數就會越多。
紅黑樹索引
紅黑樹索引:紅黑樹也不適合做索引結構,因為紅黑樹的高度也是會隨著資料量越來越高。雖然查詢複雜度為O(logn)。但是比如mysql,每次查詢索引需要訪問磁碟,那麼隨著高度越高,查詢磁碟的次數就會越多,效能就會越差。其實紅黑樹在記憶體中要比B+樹效能要好,但是基於mysql,索引存在磁碟上,所以相比B+樹更好點
B樹索引
B樹索引:其實就是在索引的橫向上做了文章,讓每個節點可以儲存更多的索引。每個索引儲存著對應的資料磁碟指標。減少了樹的高度,也就減少了訪問磁碟的次數。對效能有所提高。
B+樹索引
B+樹索引:在B樹索引上進行了優化,也是減少了樹的高度,向橫向做文章,但是B+樹索引並不是所有的索引都儲存對應資料的磁碟指標。而是隻有葉子節點才會儲存對應的磁碟指標。而非葉子節點就會儲存更多的索引。葉子節點之間的索引之間也有指標關聯。為了方便範圍查詢。時間複雜度O(logN).
LSM樹索引
LSM樹索引:為了適應寫多讀少的場景,比如hbase. 分為記憶體部分和磁碟部分。記憶體資料結構可以選擇紅黑樹,跳躍表等來維護有序資料結構。這裡考慮併發效能,hbase選擇了跳躍表來維護有序的KV集合。hbase的flush操作也是通過兩個跳錶來刷到檔案中的。hbase為了彌補讀的效能。通過多路歸併,compact,布隆過濾器,BlockCahce來優化讀。
相關文章
- BST(二叉搜尋樹)、AVL樹、紅黑樹、2-3樹、B樹、B+樹、LSM樹、Radix樹比較
- 資料結構之MySQL獨愛B+樹(二叉樹、AVL樹、紅黑樹、B樹對比)資料結構MySql二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- 【資料結構】B樹、B+樹詳解資料結構
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 資料結構之「B+樹」資料結構
- 【資料結構】查詢結構(二叉排序樹、ALV樹、雜湊技術雜湊表)資料結構排序
- 資料結構和演算法-二叉樹,AVL,紅黑樹資料結構演算法二叉樹
- 資料結構--紅黑樹資料結構
- Mysql InnoDB B+樹索引和雜湊索引的區別? MongoDB 為什麼使用B-樹?MySql索引MongoDB
- 資料結構(樹):二叉樹資料結構二叉樹
- 資料結構之「紅黑樹」資料結構
- Mysql索引資料結構為什麼是B+樹?MySql索引資料結構
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 平衡二叉查詢樹:紅黑樹
- 多路查詢樹(2-3 樹、2-3-4 樹、B 樹、B+ 樹)
- 重學資料結構和演算法(二)之二叉樹、紅黑樹、遞迴樹、堆排序資料結構演算法二叉樹遞迴排序
- B樹與B+樹區別辨析
- 搞懂MySQL InnoDB B+樹索引MySql索引
- Java實現紅黑樹(平衡二叉樹)Java二叉樹
- B 樹和 B+樹的區別, 為什麼 MySQL 要使用 B+樹MySql
- 資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)資料結構
- 樹雜湊
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- MySQL資料庫索引選擇使用B+樹MySql資料庫索引
- 資料結構之樹( 線段樹,字典樹)資料結構
- 【Mysql】InnoDB 中的 B+ 樹索引MySql索引
- 紅黑樹
- [譯]從磁碟結構到B+樹
- 重學資料結構(六、樹和二叉樹)資料結構二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 重學資料結構之樹和二叉樹資料結構二叉樹
- [資料結構] 樹、二叉樹、森林的轉換資料結構二叉樹
- 資料結構之「B樹」資料結構
- 資料結構基礎03-紅黑樹資料結構
- 『分享』兩篇講 B-樹 B+ 樹的文章