自適應雜湊索引使 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 樹和雜湊索引的比較」。