溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

InnoDB關(guān)鍵特性之自適應(yīng)hash索引

發(fā)布時(shí)間:2020-08-09 11:55:37 來源:ITPUB博客 閱讀:270 作者:chenfeng 欄目:MySQL數(shù)據(jù)庫

一、索引的資源消耗分析


1、索引三大特點(diǎn)


  1、?。褐辉谝粋€(gè)到多個(gè)列建立索引


  2、有序:可以快速定位終點(diǎn)


  3、有棵樹:可以定位起點(diǎn),樹高一般小于等于3


2、索引的資源消耗點(diǎn)


  1、樹的高度,順序訪問索引的數(shù)據(jù)頁,索引就是在列上建立的,數(shù)據(jù)量非常小,在內(nèi)存中;


  2、數(shù)據(jù)之間跳著訪問


    1、索引往表上跳,可能需要訪問表的數(shù)據(jù)頁很多;


    2、通過索引訪問表,主鍵列和索引的有序度出現(xiàn)嚴(yán)重的不一致時(shí),可能就會(huì)產(chǎn)生大量物理讀;


  資源消耗最厲害:通過索引訪問多行,需要從表中取多行數(shù)據(jù),如果無序的話,來回跳著找,跳著訪問,物理讀會(huì)很嚴(yán)重。


二、自適應(yīng)hash索引原理


1、原理過程

InnoDB關(guān)鍵特性之自適應(yīng)hash索引


Innodb存儲(chǔ)引擎會(huì)監(jiān)控對(duì)表上二級(jí)索引的查找,如果發(fā)現(xiàn)某二級(jí)索引被頻繁訪問,二級(jí)索引成為熱數(shù)據(jù),建立哈希索引可以帶來速度的提升,則:


  1)、自適應(yīng)hash索引功能被打開


mysql> show variables like '%ap%hash_index';

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| innodb_adaptive_hash_index | ON    |

+----------------------------+-------+

1 row in set (0.01 sec)

  2)、經(jīng)常訪問的二級(jí)索引數(shù)據(jù)會(huì)自動(dòng)被生成到hash索引里面去(最近連續(xù)被訪問三次的數(shù)據(jù)),自適應(yīng)哈希索引通過緩沖池的B+樹構(gòu)造而來,因此建立的速度很快。


2、特點(diǎn)


  1、無序,沒有樹高


  2、降低對(duì)二級(jí)索引樹的頻繁訪問資源


    索引樹高<=4,訪問索引:訪問樹、根節(jié)點(diǎn)、葉子節(jié)點(diǎn)


  3、自適應(yīng)


3、缺陷


  1、hash自適應(yīng)索引會(huì)占用innodb buffer pool;


  2、自適應(yīng)hash索引只適合搜索等值的查詢,如select * from table where index_col='xxx',而對(duì)于其他查找類型,如范圍查找,是不能使用的;


  3、極端情況下,自適應(yīng)hash索引才有比較大的意義,可以降低邏輯讀。


三、監(jiān)控與關(guān)閉


1、狀態(tài)監(jiān)控


mysql> show engine innodb status\G

……

Hash table size 34673, node heap has 0 buffer(s)

0.00 hash searches/s, 0.00 non-hash searches/s

  1、34673:字節(jié)為單位,占用內(nèi)存空間總量


  2、通過hash searches、non-hash searches計(jì)算自適應(yīng)hash索引帶來的收益以及付出,確定是否開啟自適應(yīng)hash索引

2、限制


  1、只能用于等值比較,例如=, <=>,in


  2、無法用于排序


  3、有沖突可能


  4、MySQL自動(dòng)管理,人為無法干預(yù)。


3、自適應(yīng)哈希索引的控制


  由于innodb不支持hash索引,但是在某些情況下hash索引的效率很高,于是出現(xiàn)了adaptive hash index功能,但是通過上面的狀態(tài)監(jiān)控,可以計(jì)算其收益以及付出,控制該功能開啟與否。


  默認(rèn)開啟,建議關(guān)掉,意義不大??梢酝ㄟ^ set global innodb_adaptive_hash_index=off/on 關(guān)閉和打開該功能。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI