Mysql自適應哈希索引(Adaptive Hash Index)創(chuàng)建的條件

官方文檔:

If a table fits almost entirely in main memory, a hash index can speed up queries by enabling direct lookup of any element, turning the index value into a sort of pointer. has a mechanism that monitors index searches. If notices that queries could benefit from building a hash index, it does so automatically.

翻譯:

如果一個表幾乎完全適合主內存,那么哈希索引可以通過直接查找任何元素來加快查詢速度,將索引值轉換為某種指針。具有監(jiān)視索引搜索的機制。如果注意到查詢可以從構建哈希索引中獲益,那么它會自動這樣做。

官方文檔給出的內容非常含糊,并沒有說明自適應哈希索引的創(chuàng)建條件,只是說自適應哈希索引會自動創(chuàng)建,沒有細節(jié)。我從網上找到了一些資料雖然說的很詳細,但是說的有點過于詳細不能一目了然,所以我重新整理下。

自適應hash創(chuàng)建的條件:

自適應hash索引(AHI)在實現上就是一個哈希表:從某個檢索條件到某個數據頁的哈希表,仿佛并不復雜,但其中的關竅在于哈希表不能太大(哈希表維護本身就有成本,哈希表太大則成本會高于收益),又不能太小(太小則緩存命中率太低,沒有任何收益)。所以在創(chuàng)建AHI上還是有一些講究的。

  1. 索引被查詢的次數足夠多。如果查詢次數用N1來表示的話那么N1應該大于17(N1>17),此過程無時間限制。

  2. 基于查詢的sql語句創(chuàng)建一個hash信息(hash info)其中包含了三部分內容:

    1)匹配索引的列數

    2)下一列匹配的字節(jié)數

    3)是否從左匹配

    例如有如下SQL語句:

    select * from table1 where a1=1 and a2=2;
    

    則生成如下哈希描述:

    hash info(2, 0, true)
    

    如果這個生成的hash info被使用的次數足夠多 (N2 > 100)

  3. 生成的hash info能夠命中某個數據頁,且命中的該頁上的記錄數要大于該頁上總記錄數的1/16(N3 > 頁記錄數的1/16)

滿足以上三點要求那么就會將hash info生成一個key,value就是指向數據頁上記錄的指針。
這樣就建立起了mysql的自適應哈希索引

參考資料:

http://mysql.taobao.org/monthly/2015/09/01/
https://mp.weixin.qq.com/s/bj6Qe98lWlrd4Hv5B0sn9w

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容