InnoDB關鍵特性之自適應hash索引
一、索引的資源消耗分析
1、索引三大特點
1、小:只在一個到多個列建立索引
2、有序:可以快速定位終點
3、有棵樹:可以定位起點,樹高一般小於等於3
2、索引的資源消耗點
1、樹的高度,順序訪問索引的資料頁,索引就是在列上建立的,資料量非常小,在記憶體中;
2、資料之間跳著訪問
1、索引往表上跳,可能需要訪問表的資料頁很多;
2、通過索引訪問表,主鍵列和索引的有序度出現嚴重的不一致時,可能就會產生大量物理讀;
資源消耗最厲害:通過索引訪問多行,需要從表中取多行資料,如果無序的話,來回跳著找,跳著訪問,物理讀會很嚴重。
二、自適應hash索引原理
1、原理過程
Innodb儲存引擎會監控對錶上二級索引的查詢,如果發現某二級索引被頻繁訪問,二級索引成為熱資料,建立雜湊索引可以帶來速度的提升,則:
1)、自適應hash索引功能被開啟
mysql> show variables like '%ap%hash_index';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | ON |
+----------------------------+-------+
1 row in set (0.01 sec)
2)、經常訪問的二級索引資料會自動被生成到hash索引裡面去(最近連續被訪問三次的資料),自適應雜湊索引通過緩衝池的B+樹構造而來,因此建立的速度很快。
2、特點
1、無序,沒有樹高
2、降低對二級索引樹的頻繁訪問資源
索引樹高<=4,訪問索引:訪問樹、根節點、葉子節點
3、自適應
3、缺陷
1、hash自適應索引會佔用innodb buffer pool;
2、自適應hash索引只適合搜尋等值的查詢,如select * from table where index_col='xxx',而對於其他查詢型別,如範圍查詢,是不能使用的;
3、極端情況下,自適應hash索引才有比較大的意義,可以降低邏輯讀。
三、監控與關閉
1、狀態監控
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:位元組為單位,佔用記憶體空間總量
2、通過hash searches、non-hash searches計算自適應hash索引帶來的收益以及付出,確定是否開啟自適應hash索引
2、限制
1、只能用於等值比較,例如=, <=>,in
2、無法用於排序
3、有衝突可能
4、MySQL自動管理,人為無法干預。
3、自適應雜湊索引的控制
由於innodb不支援hash索引,但是在某些情況下hash索引的效率很高,於是出現了adaptive hash index功能,但是通過上面的狀態監控,可以計算其收益以及付出,控制該功能開啟與否。
預設開啟,建議關掉,意義不大。可以通過 set global innodb_adaptive_hash_index=off/on 關閉和開啟該功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2286068/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Innodb關鍵特性之重新整理鄰接頁
- Innodb特性之change buffer
- Spark 3.0 新特性 之 自適應查詢與分割槽動態裁剪Spark
- 關於MySQL InnoDB表的二級索引是否加入主鍵的總結MySql索引
- InnoDB學習(七)之索引結構索引
- InnoDB學習(八)之 聚簇索引索引
- oracle全文索引之幾個關鍵表Oracle索引
- innodb索引篇索引
- MySQL InnoDB 索引MySql索引
- @media實現網頁自適應中的幾個關鍵解析度網頁
- Innodb特性之Read-Ahead(Buffer Pool Prefetching)
- oracle之 反向鍵索引Oracle索引
- 微服務治理之自適應降載微服務
- MySQL 8 新特性之自增主鍵的持久化MySql持久化
- mysql innodb索引高度MySql索引
- innodb 引擎索引 (一)索引
- InnoDB 索引詳解索引
- MySQL 禁止使用 HASH 索引MySql索引
- 三欄佈局之自適應佈局
- 深入理解HashMap(二): 關鍵原始碼逐行分析之hash演算法HashMap原始碼演算法
- 自適應案例
- 淺析InnoDB引擎的索引和索引原理索引
- textarea 高度自適應
- 圖片自適應
- JFrame自適應大小
- 自適應辛普森法
- 探索MySQL的InnoDB索引失效MySql索引
- InnoDB索引與底層原理索引
- 關於InnoDB表資料和索引資料的儲存索引
- MySQL自適應雜湊索引的特點和缺陷介紹和歸納MySql索引
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- Apache Hudi重磅特性解讀之全域性索引Apache索引
- vue前端自適應佈局,一步到位所有自適應Vue前端
- AntDB-M高效能設計之hash索引動態rehash索引
- [20210520]關於主鍵索引問題.txt索引
- 搞懂MySQL InnoDB B+樹索引MySql索引
- MySQL InnoDB的索引擴充套件MySql索引套件
- MySQL InnoDB搜尋索引的StopwordsMySql索引