1.作用 ?????
???? 自適應哈希索引使InnoDB能夠在具有適當的工作負載組合和足夠的緩沖池內存的系統上執行更像內存中的數據庫,而不會犧牲事務特性或可靠性。
2.設置
自適應哈希索引由innodb_adaptive_hash_index變量啟用
或在服務器啟動時由--skip-innodb-adaptive-hash-index關閉。
3.自適應
根據觀察到的搜索模式,使用索引鍵的前綴構建哈希索引。
前綴可以是任何長度,并且可能只有B樹中的一些值出現在哈希索引中。
哈希索引是根據經常訪問的索引頁的需要構建的。
如果一個表幾乎完全適合主內存,那么哈希索引可以通過直接查找任何元素來加快查詢速度,將索引值變成某種指針。
InnoDB有一個監視索引搜索的機制。如果InnoDB注意到查詢可以從構建哈希索引中受益,它會自動這樣做。
博主PS:
我們知道表的數據是通過頁組成為一顆B+樹存放的,自適應哈希索引的意義就是監控哪些頁經常被訪問到,那么就把這些經常訪問到的頁使用hash索引,鍵值對的方式存放下來,下一次要找某頁數據時,就不從B+樹尋找了,直接hash判斷頁的位置。我們知道B+樹本質是二分查找法。二分查找是永遠沒有hash算法直接計算數據位置來得快的。
4.其他情況
對于某些工作負載,哈希索引查找的速度大大超過了監視索引查找和維護哈希索引結構的額外工作。在繁重的工作負載(例如多個并發聯接)下,對自適應哈希索引的訪問有時會成為爭用的來源。使用LIKE運算符和%通配符的查詢也往往沒有好處。
對于沒有從自適應哈希索引中獲益的工作負載,關閉它可以減少不必要的性能開銷。
由于很難提前預測自適應哈希索引是否適用于特定的系統和工作負載,請考慮在啟用和禁用它的情況下運行基準測試。
對自適應哈希索引功能進行了分區。每個索引都綁定到一個特定的分區,每個分區都由一個單獨的鎖存器保護。分區由innodb_adaptive_hash_index_parts變量控制。
innodb_adaptive_hash_index_parts變量默認設置為8。最大設置為512。
您可以在SHOW ENGINE INNODB STATUS輸出的SEMAPHORES部分中監視自適應哈希索引的使用和爭用。如果在btr0sea.c中創建的rw鎖存器上有許多線程在等待,請考慮增加自適應哈希索引分區的數量或禁用自適應哈希索引。
5.B樹和哈希索引
有關哈希索引的性能特征的信息,請參閱第10.3.9節“B樹和哈希索引的比較”。
【MySQL精通之路】優化-B樹索引與哈希索引-CSDN博客