Adaptive Hash Index, AHIhtml
好比咱們每次從輔助索引查詢到對應記錄的主鍵,而後還要用主鍵做爲search key去搜索主鍵B+tree才能找到記錄.mysql
當這種搜索變多了,innoDB引擎會進行優化.sql
維護索引葉頁面中全部記錄的索引鍵值(或鍵值前綴)到索引葉頁面位置的Hash映射關係,
可以根據索引鍵值(前綴)快速定位到葉頁面知足條件記錄的Offset,減小了B+樹Search Path的代價,將B+樹從Root頁面至Leaf頁面的路徑定位,優化爲Hash Index的快速查詢。數據庫
Adaptive Hash Index是針對B+樹Search Path的優化,所以全部會涉及到Search Path的操做,都可使用此Hash索引進行優化.性能
AHI還有一些要求,對這個頁的連續訪問模式必須是同樣的。例如對於(a,b)這樣的聯合索引頁,其訪問模式能夠是下面狀況:優化
訪問模式同樣是指查詢的條件是同樣的,若交替進行上述兩種查詢,那麼InnoDB存儲引擎不會對該頁構造AHI。 固然,訪問模式一致,還必須達到必定的數量,好比頁經過該模式訪問了N次,其中N=頁中記錄*1/16.spa
一些資料統計,啓用AHI後,讀取和寫入速度能夠提升2倍,輔助索引的鏈接操做性能能夠提升5倍。.net
AHI的設計思想是數據庫自優化,不須要DBA對數據庫進行手動調整,只能選擇開啓或者關閉。咱們能夠經過以下命令查看innodb AHI的使用狀況.設計
mysql> show engine innodb status
複製代碼