Hash索引和BTree索引,Hash索引BTree索引

來源:互聯網
上載者:User

Hash索引和BTree索引,Hash索引BTree索引

索引是協助mysql擷取資料的資料結構。最常見的索引是Btree索引和Hash索引。

不同的引擎對於索引有不同的支援:Innodb和MyISAM預設的索引是Btree索引;而Mermory預設的索引是Hash索引。


Hash索引

所謂Hash索引,當我們要給某張表某列增加索引時,將這張表的這一列進行雜湊演算法計算,得到雜湊值,排序在雜湊數組上。所以Hash索引可以一次定位,其效率很高,而Btree索引需要經過多次的磁碟IO,但是innodb和myisam之所以沒有採用它,是因為它存在著好多缺點:

1、因為Hash索引比較的是經過Hash計算的值,所以只能進行等式比較,不能用於範圍查詢

1、每次都要全表掃描

2、由於雜湊值是按照順序排列的,但是雜湊值映射的真正資料在雜湊表中就不一定按照順序排列,所以無法利用Hash索引來加速任何排序操作

3、不能用部分索引鍵來搜尋,因為複合式索引在計算雜湊值的時候是一起計算的。

4、當雜湊值大量重複且資料量非常大時,其檢索效率並沒有Btree索引高的。


Btree索引

至於Btree索引,它是以B+樹為儲存結構實現的。

但是Btree索引的儲存結構在Innodb和MyISAM中有很大區別。

在MyISAM中,我們如果要對某張表的某列建立Btree索引的話,



所以我們經常會說MyISAM中資料檔案和索引檔案是分開的。

因此MyISAM的索引方式也稱為非聚集,Innodb的索引方式成為叢集索引。

至於輔助索引,類似於主索引,唯一區別就是主索引上的值不能重複,而輔助索引可以重複。



因此當我們根據Btree索引去搜尋的時候,若key存在,在data域找到其地址,然後根據地址去表中尋找資料記錄。

至於Innodb它跟上面又有很大不同,它的葉子節點儲存的並不是表的地址,而是資料




我們可以看到這裡並沒有將地址放入葉子節點,而是直接放入了對應的資料,這也就是我們平常說到的,Innodb的索引檔案就是資料檔案,

那麼對於Innodb的輔助索引結構跟主索引也相差很多,



我們可以發現,這裡葉子節點儲存的是主鍵的資訊,所以我們在利用輔助索引的時候,檢索到主鍵資訊,然後再通過主鍵去主索引中定位表中的資料,這就可以說明Innodb中主鍵之所以不宜用過長的欄位,由於所有的輔助索引都包含主索引,所以很容易讓輔助索引變得龐大。

我們還可以發現:在Innodb中盡量使用自增的主鍵,這樣每次增加資料時只需要在後面添加即可,非單調的主鍵在插入時會需要維持B+tree特性而進行分裂調整,十分低效。


Btree索引中的最左匹配原則:

Btree是按照從左至右的順序來建立搜尋樹的。比如索引是(name,age,sex),會先檢查name欄位,如果name欄位相同再去檢查後兩個欄位。

所以當傳進來的是後兩個欄位的資料(age,sex),因為建立搜尋樹的時候是按照第一個欄位建立的,所以必鬚根據name欄位才能知道下一個欄位去哪裡查詢。

所以傳進來的是(name,sex)時,首先會根據name指定搜尋方向,但是第二個欄位缺失,所以將name欄位正確的都找到後,然後才會去匹配sex的資料。


建立索引的規則:

1、利用最左首碼:Mysql會一直向右尋找直到遇到範圍操作(>,<,like、between)就停止匹配。比如a=1 and b=2 and c>3 and d=6;此時如果建立了(a,b,c,d)索引,那麼後面的d索引是完全沒有用到,當換成了(a,b,d,c)就可以用到。

2、不能過度索引:在修改表內容的時候,索引必須更新或者重構,所以索引過多時,會消耗更多的時間。

3、盡量擴充索引而不要建立索引

4、最適合的索引的列是出現在where子句中的列或串連子句中指定的列。

5、不同值較少的列不必要建立索引(性別)。






參考文章:

MySQL的btree索引和hash索引的區別

MySQL索引原理及慢查詢最佳化

MySQL索引背後的資料結構及演算法原理

圖片來源於:MySQL索引背後的資料結構及演算法原理


著作權聲明:本文為博主原創文章,轉載請註明出處。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.