1. 程式人生 > >B+樹及資料庫索引的應用

B+樹及資料庫索引的應用

B樹

  每個節點都儲存key和data,所有節點組成這棵樹,並且葉子節點指標為null。

B+樹

  只有葉子節點儲存data,葉子節點包含了這棵樹的所有鍵值,葉子節點不儲存指標。

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

  原因有很多,最主要的是這棵樹矮胖,呵呵。一般來說,索引很大,往往以索引檔案的形式儲存的磁碟上,索引查詢時產生磁碟I/O消耗,相對於記憶體存取,I/O存取的消耗要高几個數量級,所以評價一個數據結構作為索引的優劣最重要的指標就是在查詢過程中磁碟I/O操作次數的時間複雜度。樹高度越小,I/O次數越少。 

  那為什麼是B+樹而不是B樹呢,因為它內節點不儲存data,這樣一個節點就可以儲存更多的key。

在MySQL中,最常用的兩個儲存引擎是MyISAMInnoDB,它們對索引的實現方式是不同的。

 

MyISAM 

  data存的是資料地址。索引是索引,資料是資料。

  

 

InnoDB

  data存的是資料本身。索引也是資料。