一、索引的资源消耗分析
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 关闭和打开该功能。
InnoDB关键特性之自适应hash索引
来源:这里教程网
时间:2026-03-01 11:51:50
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- InnoDB关键特性之自适应hash索引
InnoDB关键特性之自适应hash索引
26-03-01 - 3ds Max使用Blend混合材质制作电池
3ds Max使用Blend混合材质制作电池
26-03-01 - MySQL 中一个双引号的错位引发的血案
MySQL 中一个双引号的错位引发的血案
26-03-01 - 详细解析Maya的mental ray渲染阴森蛋洞
详细解析Maya的mental ray渲染阴森蛋洞
26-03-01 - MySQL架构与业务总结图
MySQL架构与业务总结图
26-03-01 - 举个栗子看如何做MySQL 内核深度优化
举个栗子看如何做MySQL 内核深度优化
26-03-01 - 3dmax融合后期制作超酷室外效果图
3dmax融合后期制作超酷室外效果图
26-03-01 - MySQL8.0:倒序索引数据的数据排列方式
MySQL8.0:倒序索引数据的数据排列方式
26-03-01 - MySQL备份的几种常用方法与恢复步骤
MySQL备份的几种常用方法与恢复步骤
26-03-01 - MySQL 实战 | 08 懵逼,可重复读好像失效了?
MySQL 实战 | 08 懵逼,可重复读好像失效了?
26-03-01
