mysql索引的數據結構

之前寫過一個關於數據庫索引的博客,今天繼續說一下關於索引的幾種類型。

如果使用navicat建立過索引的應該都知道,他會給你一個選項,選擇是建立hash還是b+tree類型的。

那麼他們到底有什麼不同呢。其實這得從數據結構說起。

hash

顧名思義,所以會出現hash衝突問題,並且數據是屬於k-v格式,所以適合快速精準查詢不支持範圍查詢。

如果用於做索引的話,那麼侷限性就比較大了。

我能想到的場景中,暫時還真沒有適合於hash索引的。

 

二叉樹

說b+tree之前,先簡單說一下二叉樹數據結構,二叉樹中一個節點至多隻有兩個子節點並且和當前節點是關聯的, 所以天生支持範圍查詢;但缺點是當節點一點樹高就會很高,查詢一次的時間複雜度是On。性能不夠。

 

Btree

所以在二叉樹基礎上,又做了Btree結構,他們的區別在於一個節點可以存儲多個數據。這麼做的好處是明顯降低樹高,一次可以取出多個數據,減少了磁盤IO次數。

 

B+tree

和Btree類似,區別在於非葉子結點會冗餘一份在葉子節點中。並且葉子節點之間通過指針相連。

這麼做的好處是提高了範圍查詢的效率。只需要查詢葉子節點即可。所以選擇b+tree索引相對來說效率最高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章