自適應雜湊索引使 InnoDB
在具有適當的工作負載組合且緩衝池具有足夠記憶體的系統上,更像記憶體內資料庫一樣執行,而不會犧牲交易功能或可靠性。自適應雜湊索引由 innodb_adaptive_hash_index
變數停用,或由 --innodb-adaptive-hash-index
在伺服器啟動時開啟。
根據觀察到的搜尋模式,使用索引鍵的前綴來建置雜湊索引。前綴可以是任何長度,而且可能只有 B 樹中的某些值才會出現在雜湊索引中。雜湊索引是針對經常存取的索引頁面按需建置的。
如果表格幾乎完全符合主記憶體,則雜湊索引可透過直接查閱任何元素(將索引值轉換為某種指標)來加速查詢。InnoDB
具有監控索引搜尋的機制。如果 InnoDB
注意到查詢可以從建置雜湊索引中受益,它會自動執行此操作。
在某些工作負載中,雜湊索引查閱的速度提升遠遠超過監控索引查閱和維護雜湊索引結構的額外工作。在繁重的工作負載(例如多個並行聯結)下,對自適應雜湊索引的存取有時會成為爭用的來源。使用 LIKE
運算子和 %
萬用字元的查詢往往也無法受益。對於無法從自適應雜湊索引中受益的工作負載,將其關閉可減少不必要的效能額外負荷。由於很難預先判斷自適應雜湊索引是否適合特定系統和工作負載,請考慮在啟用和停用的情況下執行基準測試。
自適應雜湊索引功能是經過分割的。每個索引都綁定到一個特定的分割區,並且每個分割區都由一個獨立的閂鎖保護。分割是由 innodb_adaptive_hash_index_parts
變數控制。innodb_adaptive_hash_index_parts
變數預設設定為 8。最大設定值為 512。
您可以在 SHOW ENGINE INNODB STATUS
輸出的 SEMAPHORES
區段中監控自適應雜湊索引的使用情況和競爭情形。如果有很多執行緒在 btr0sea.c
中建立的 rw-latches 上等待,請考慮增加自適應雜湊索引分割區的數量,或停用自適應雜湊索引。
有關雜湊索引效能特性的資訊,請參閱第 10.3.9 節「B 樹和雜湊索引的比較」。