mysql哈希索引 kv_Mysql自适应哈希索引(Adaptive Hash Index)创建的条件

官方文档:

If a table fits almost entirely in main memory, a hash index can speed up queries by enabling direct lookup of any element, turning the index value into a sort of pointer. has a mechanism that monitors index searches. If notices that queries could benefit from building a hash index, it does so automatically.

翻译:

如果一个表几乎完全适合主内存,那么哈希索引可以通过直接查找任何元素来加快查询速度,将索引值转换为某种指针。具有监视索引搜索的机制。如果注意到查询可以从构建哈希索引中获益,那么它会自动这样做。

官方文档给出的内容非常含糊,并没有说明自适应哈希索引的创建条件,只是说自适应哈希索引会自动创建,没有细节。我从网上找到了一些资料虽然说的很详细,但是说的有点过于详细不能一目了然,所以我重新整理下。

自适应hash创建的条件:

自适应hash索引(AHI)在实现上就是一个哈希表:从某个检索条件到某个数据页的哈希表,仿佛并不复杂,但其中的关窍在于哈希表不能太大(哈希表维护本身就有成本,哈希表太大则成本会高于收益),又不能太小(太小则缓存命中率太低,没有任何收益)。所以在创建AHI上还是有一些讲究的。

索引被查询的次数足够多。如果查询次数用N1来表示的话那么N1应该大于17(N1>17),此过程无时间限制。

基于查询的sql语句创建一个hash信息(hash info)其中包含了三部分内容:

1)匹配索引的列数

2)下一列匹配的字节数

3)是否从左匹配

例如有如下SQL语句:

select * from table1 where a1=1 and a2=2;

则生成如下哈希描述:

hash info(2, 0, true)

如果这个生成的hash info被使用的次数足够多 (N2 > 100)

生成的hash info能够命中某个数据页,且命中的该页上的记录数要大于该页上总记录数的1/16(N3 > 页记录数的1/16)

满足以上三点要求那么就会将hash info生成一个key,value就是指向数据页上记录的指针。

这样就建立起了mysql的自适应哈希索引

参考资料:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值