Mysql中索引類型,B-tree、Hash索引怎么實現的以及其特點?


一:B-tree索引 相當於金字塔大樹分支 例如1000條數據 也就10多行 那么查詢也只需要10多次。獨立索引只能用一個。

二: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的輔助索引結構跟主索引也相差很多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM