B-Tree與B+Tree簡明扼要的區別

原文:https://blog.csdn.net/zhuanzhe117/article/details/78039692 數據庫

看了不少講B樹和B+樹的文章,大多都是圍繞各自的特性講的,第一,樹中每一個結點最多含有m個孩子(m>=2);第二,……我也是從這些文章里弄懂了各類樹的聯繫與區別,要真寫,我可能還不如人家寫得好。因此就在這裏簡明扼要的用幾張圖記錄一下主要區別吧。 安全

  爲了便於說明,咱們先定義一條數據記錄爲一個二元組[key,data],key爲記錄的鍵值,key惟一;data爲數據記錄除key外的數據。數據結構

 

B樹.net

  每一個節點都存儲key和data,全部節點組成這棵樹,而且葉子節點指針爲null。3d

 

B+樹指針

  只有葉子節點存儲data,葉子節點包含了這棵樹的全部鍵值,葉子節點不存儲指針。blog

 

  後來,在B+樹上增長了順序訪問指針,也就是每一個葉子節點增長一個指向相鄰葉子節點的指針,這樣一棵樹成了數據庫系統實現索引的首選數據結構。 索引

  緣由有不少,最主要的是這棵樹矮胖,呵呵。通常來講,索引很大,每每以索引文件的形式存儲的磁盤上,索引查找時產生磁盤I/O消耗,相對於內存存取,I/O存取的消耗要高几個數量級,因此評價一個數據結構做爲索引的優劣最重要的指標就是在查找過程當中磁盤I/O操做次數的時間複雜度。樹高度越小,I/O次數越少。 事務

  那爲何是B+樹而不是B樹呢,由於它內節點不存儲data,這樣一個節點就能夠存儲更多的key。內存

 

  在MySQL中,最經常使用的兩個存儲引擎是MyISAM和InnoDB,它們對索引的實現方式是不一樣的。

 

MyISAM 

  data存的是數據地址。索引是索引,數據是數據。索引放在XX.MYI文件中,數據放在XX.MYD文件中,因此也叫非彙集索引。

 

InnoDB

  data存的是數據自己。索引也是數據。數據和索引存在一個XX.IDB文件中,因此也叫彙集索引。

 

  瞭解了數據結構再看索引,一切都不費解了,只是順着邏輯推而已。另加兩種存儲引擎的區別:

一、MyISAM是非事務安全的,而InnoDB是事務安全的

二、MyISAM鎖的粒度是表級的,而InnoDB支持行級鎖

三、MyISAM支持全文類型索引,而InnoDB不支持全文索引

四、MyISAM相對簡單,效率上要優於InnoDB,小型應用能夠考慮使用MyISAM

五、MyISAM表保存成文件形式,跨平臺使用更加方便

六、MyISAM管理非事務表,提供高速存儲和檢索以及全文搜索能力,若是在應用中執行大量select操做可選擇

七、InnoDB用於事務處理,具備ACID事務支持等特性,若是在應用中執行大量insert和update操做,可選擇。

相關文章
相關標籤/搜索