您好,登錄后才能下訂單哦!
一、索引的資源消耗分析
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存儲(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)閉和打開該功能。
免責(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)容。