1 mysql索引的實現原理

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

相關文章
相關標籤/搜索