MySQL有哈希索引嗎?

是否有Hash索引應(yīng)該這樣理解:

(1)InnoDB用戶是無法創(chuàng)建Hash索引的 (2)InnoDB采用內(nèi)部自適應(yīng)建立哈希索引 例如select * from t where name='ls';name建了普通索引,發(fā)起普通索引查詢時
  • (1)會先從普通索引查詢出主鍵;
  • (2)再由主鍵,從聚集索引上二次遍歷定位到記錄
不管聚集索引還是普通索引,記錄定位的尋路路徑(Search Path)都很長。 在MySQL運行的過程中,如果InnoDB發(fā)現(xiàn),有很多SQL會命中相同的頁,InnoDB會在Buffer里建立自適應(yīng)哈希索引,以加速查詢。簡單理解就是“索引的索引”,key是索引鍵值(或者索引前綴),value是索引記錄頁面位置。
當(dāng)為下面幾種情況時適合開啟自適應(yīng)哈希索引:
  • 如果存儲的數(shù)據(jù)重復(fù)度很低,對該列數(shù)據(jù)以等值查詢?yōu)橹?,沒有范圍查詢、沒有排序的時候,特別適合采用哈希索引
當(dāng)為下面幾種情況時不適合開啟自適應(yīng)哈希索引:
  • 當(dāng)業(yè)務(wù)有高并發(fā)的join操作,like操作和%的通配符操作,自適應(yīng)哈希索引中添加的read/write鎖也會帶來競爭,自適應(yīng)哈希索引的維護(hù)反而可能成為負(fù)擔(dān),降低系統(tǒng)效率,此時可以手動關(guān)閉自適應(yīng)哈希功能。
可以通過命令show variables like 'innodb_adaptive_hash_index'查看自適應(yīng)哈希索引的狀態(tài) 通過參數(shù)--skip-innodb-adaptive-hash-index關(guān)閉自適應(yīng)哈希

本文使用 文章同步助手 同步

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容