InnoDB存储引擎中的自适应哈希索引

InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式

对于缓冲池页的哈希表来说,缓冲池的Page页都有一个chain指针,指向相同哈希值的页。

对于除法散列,模m的值略大于2倍的缓冲池的总页数的质数。

如: innodb_buffer_pool_size = 10M ,则共有页数为 10*1024*1024/(16*1024) = 640个页。

缓冲池页内存的哈希表来说,需要分配640*2个槽,比1280大的最小质数为1399,启动时会分配1399个槽的哈希表,用来哈希查询所在缓冲池中的页。

如何查询缓冲池中的哈希表页?

InnoDB存储引擎中的表空间都有一个space_id,实际用户查询的是一个page大小内容,即偏移量offset。InnoDB存储引擎将space_id 左移20位,然后加上这个space_id 和 offset,即 K = space_id<<20 + space_id + offset, 然后 K/m 散列到各个槽去。

 

InnoDB中的自适应哈希索引 SHOW ENGINE INNODB STATUS

不同于前文所讲的哈希表,自适应哈希索引是数据库自身创建并使用的,DBA不能对其进行干预。自适应哈希索引经哈希函数映射到一个哈希表中,因此对于字典类型的查找非常快速,但对于范围查找无能为力!

可以通过参数 innodb_adaptive_hash_index 来禁用或者开启

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值