1. 程式人生 > 其它 >Mysql中的B+tree索引

Mysql中的B+tree索引

BTree意思是多路平衡查詢樹,它是一種資料結構。MySQL的InnoDB和MyISAM儲存引擎,都是使用它來儲存索引。BTree可細分為B-Tree和B+Tree,B+Tree是B-Tree的升級版。MySQL的InnoDB和MyISAM儲存引擎使用的是B+Tree

一 B-Tree

先來了解一下B-Tree,學名:多路平衡查詢樹,是為磁碟等外儲存裝置設計的一種平衡查詢樹,

為了描述B-Tree,首先定義一條記錄為一個二元組[key, data] ,key為記錄的鍵值,對應表中的主鍵值,data為一行記錄中除主鍵外的資料。對於不同的記錄,key值互不相同。如下圖中的紫色部分就是key,橙色部分就是一行資料,綠色部分就是指標。

 對於B-Tree的查詢,從圖中可以看到,單個查詢應該還可以,但是如果做範圍查詢的話,存在迴旋查詢的問題。同樣order by排序的時候效率也很低,因為要把樹上的資料手動排序一遍

二 B+Tree

B+Tree的資料都是儲存在葉子節點,非葉子節點只儲存key,不儲存data,並且所有的葉子節點是一個連結串列結構,這樣有利於範圍查詢。

三 聚簇索引於非聚簇索引

聚簇索引:將資料與索引放到了一塊,索引的葉子節點儲存了行資料

非聚簇索引:將資料分開儲存,索引結構的葉子節點指向了資料對應的位置

通常,主鍵都是聚簇索引,我們根據實際情況自行新增的索引都是輔助索引,輔助索引就是一個為了需找主鍵索引的二級索引,先得找到主鍵索引再通過主鍵索引找資料(這就是所謂的回表)

聚簇索引的優點是對於主鍵的排序查詢和範圍查詢速度非常快,缺點也很明顯:1插入速度眼中依賴於插入順序,按照主鍵的順序插入是最快的方式,否則會出現頁分裂,嚴重影響效能。因此,對於Innodb表,我們都會定義一個自增的ID列作為主鍵。2 更新主鍵的代價很高,因為將會導致被更新的行移動,一次,一般定義主鍵不可更新。3 二級索引訪問需要兩次索引查詢,第一次找到主鍵值,第二次根據主鍵值找到行資料。