mysql 使用B+Tree做爲索引實現,並在葉子結點增長了順序訪問指針。html
紅黑樹等數據結構也能夠用來實現索引,可是文件系統及數據庫系統廣泛採用B-/+Tree做爲索引結構mysql
目前大部分數據庫系統及文件系統都採用B-Tree或其變種B+Tree做爲索引結構。跟磁盤IO讀寫有關。sql
MyISAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。數據庫
MyISAM引擎使用B+Tree做爲索引結構,葉節點的data域存放的是數據記錄的地址。數據結構
MyISAM的索引方式也叫作「非彙集」的,之因此這麼稱呼是爲了與InnoDB的彙集索引區分。性能
InnoDB的數據文件自己就是主鍵的索引文件,葉子結點保存的是數據。因此InnoDB必須有pk,MyISAM能夠沒有pk。.net
輔助索引葉子結點存儲相應記錄的主鍵,因此主鍵查詢最快,非主鍵索引查出來的數據是主鍵,再用主鍵查找最終數據。debug
http://blog.csdn.net/debug_zhang/article/details/52168552指針
https://www.cnblogs.com/luyucheng/p/6289714.htmlhtm
Hash 索引結構的特殊性,其檢索效率很是高,索引的檢索能夠一次定位,不像B-Tree 索引須要從根節點到枝節點,最後才能訪問到頁節點這樣屢次的IO訪問,因此 Hash 索引的查詢效率要遠高於 B-Tree 索引。
缺點:(1)Hash 索引僅僅能知足"=","IN"。因爲 Hash 索引比較的是進行 Hash 運算以後的 Hash 值,因此它只能用於等值的過濾
(2)Hash 索引沒法被用來避免數據的排序操做。
(3)Hash 索引不能利用部分索引鍵查詢。
對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合併後再一塊兒計算 Hash 值,而不是單獨計算 Hash 值,因此經過組合索引的前面一個或幾個索引鍵進行查詢的時候,Hash 索引也沒法被利用。
(4)Hash 索引在任什麼時候候都不能避免表掃描。
(5)Hash 索引遇到大量Hash值相等的狀況後性能並不必定就會比B-Tree索引高。
https://www.cnblogs.com/vijayfly/p/6485442.html