索引方式:真的是用的B+Tree 吗?
在Navicat 的工具中,創建索引,索引方式有兩種,Hash 和B Tree。
HASH:以KV 的形式檢索數據,也就是說,它會根據索引字段生成哈希碼和指針,指針指向數據。
哈希索引有什么特點呢?
第一個,它的時間復雜度是O(1),查詢速度比較快。因為哈希索引里面的數據不是按順序存儲的,所以不能用于排序。?
第二個,我們在查詢數據的時候要根據鍵值計算哈希碼,所以它只能支持等值查詢(= IN),不支持范圍查詢(> < >= <= between and)。
另外一個就是如果字段重復值很多的時候,會出現大量的哈希沖突(采用拉鏈法解決),效率會降低。
問題: InnoDB 可以在客戶端創建一個索引,使用哈希索引嗎?
https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html
InnoDB utilizes hash indexes internally for its Adaptive Hash Index feature
直接翻譯過來就是:InnoDB 內部使用哈希索引來實現自適應哈希索引特性。
這句話的意思是InnoDB 只支持顯式創建B+Tree 索引,對于一些熱點數據頁,InnoDB 會自動建立自適應Hash 索引,也就是在B+Tree 索引基礎上建立Hash 索引,這個過程對于客戶端是不可控制的,隱式的。
我們在Navicat 工具里面選擇索引方法是哈希,但是它創建的還是B+Tree 索引,這個不是我們可以手動控制的。
上次課我們說到buffer pool 里面有一塊區域是Adaptive Hash Index 自適應哈希索引,就是這個。
這個開關默認是ON:
show variables like 'innodb_adaptive_hash_index';從存儲引擎的運行信息中可以看到:
show engine innodb status\G----------------------
BUFFER POOL AND MEMORY
----------------------
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
因為B Tree 和B+Tree 的特性,它們廣泛地用在文件系統和數據庫中,例如Windows的HPFS 文件系統,Oracel、MySQL、SQLServer 數據庫。
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的索引方式:真的是用的B+Tree 吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么不用红黑树?
- 下一篇: 索引使用原则-列的离散(sàn)度