购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 自适应哈希索引

哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为 O (1),即一般仅需要一次查找就能准确定位。B+Tree的查找次数则取决于B+Tree的高度,在大多数的生产环境中,B+Tree的高度一般为3到5层,故需要3~5次的查询。

InnoDB存储引擎会监控对表上二级索引的查找。如果发现某二级索引被频繁访问,二级索引就成为热数据;如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以称之为自适应(adaptive)的,即自适应哈希索引(Adaptive Hash Index,AHI)。

经常访问的二级索引数据会自动被生成到hash索引里面(最近连续被访问3次的数据),自适应哈希索引通过缓冲池的B+Tree构造而来,因此建立的速度很快,而且不需要将整个表都建立哈希索引,InnoDB存储引擎会自动根据访问的频率和模式来为某些页建立哈希索引。

自适应哈希索引会占用InnoDB Buffer Pool,而且只适合搜索等值的查询,如select * from table where index_col='xxx';对于其他查找类型,如范围查找,是不能使用的。MySQL自动管理,人为无法干预。

查看当前自适应哈希索引的使用状况可以使用show engine innodb status\G命令,通过hash searches、non-hash searches计算自适应哈希索引带来的收益以及付出,确定是否开启自适应哈希索引。

对于某些工作负载,如使用like和%的范围查询以及高并发的joins,不适合使用自适应哈希索引,维护哈希索引结构的额外开销会带来严重性能损耗。这种情况更适合于禁用自适应哈希索引,建议关掉,尽管默认情况下仍然启用。可以通过“set global innodb_adaptive_hash_index=off/on”命令来关闭或打开该功能。 98yn/k7LIlMmD4hwMPMhC2sXuLhq35oAit3qnJoAcHV0Y9bpRkgC35AkhuzPA9lh

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开