MySQL中InnoDB存储引擎中的哈希算法
2016-01-26 22:26
1021 查看
InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式。对于缓冲池页的哈希表来说,在缓冲池中的Page页都有一个chain指针。它指向相同哈希函数值的页的。而对于除法散列,m的取值略大于2倍的缓冲池页数量的质数。例如:当前参数innodb_buffer_pool_size的大小为10M,则共有640个16kb的页。对于缓冲池页内存的哈希表来说,需要分配640*2=1280个槽,但是由于1280不是质数,需要取比1280略大的一个质数,应该是1399,所以在启动时会分配1399个槽的哈希表,用来哈希查询所在缓冲池中的页
那么在InnoDB存储引擎的缓冲池对于其中的页事怎么进行查找的呢?上面只是给出了一般的算法,怎么讲查找的页转换成自然数呢?
其实很简单,InnoDB存储引擎的表空间都有一个space_id,用户索要查找的应该是某个表空间 某个连续16KB的页,即偏移量offset,InnoDB存储引擎将space_id左移20位,然后加上这个space_id和offset,即关键字K=space_id<<20+space_id+offset,然后通过触发散列到各个槽中
那么在InnoDB存储引擎的缓冲池对于其中的页事怎么进行查找的呢?上面只是给出了一般的算法,怎么讲查找的页转换成自然数呢?
其实很简单,InnoDB存储引擎的表空间都有一个space_id,用户索要查找的应该是某个表空间 某个连续16KB的页,即偏移量offset,InnoDB存储引擎将space_id左移20位,然后加上这个space_id和offset,即关键字K=space_id<<20+space_id+offset,然后通过触发散列到各个槽中
相关文章推荐
- mysql主从复制
- navicat for mysql导入导出数据库表格及数据
- mysql数据库的安装与使用
- MySQL慢查询配置,及解决相关问题
- jsp页面提交中文到MySql数据库乱码
- jsp链接mysql数据库
- 批量kill mysql线程和输出完整info mysql线程
- redhat 6.5最小化系统安装mysql 5.7.9
- mysql完全卸载
- MySQL数据库的JDBC连接方法
- 3.2mysql性能测试--课程笔记
- MySQL建立索引的注意事项
- Ubuntu下安装mysql
- mysql主从复制
- JSP+Servlet+JDBC+MySQL实现表单生成
- 关于Mysql5.6中使用group_concat()函数返回的数据总数不完整的坑
- C3P0官方对于MySQL8小时问题的解决方案
- 21分钟MYSQL入门
- mysql创建索引
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)