MySQL中InnoDB存储引擎中的哈希算法
2024-08-28 23:02:55
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,然后通过触发散列到各个槽中
最新文章
- StringBuffer
- 生成证书时Distribution下面App Store and Ad Hoc 选项不能选择的原因及解决办法
- Jquery核心函数
- phpStudy(lnmp)集成环境安装
- 深度探索C++对象模型读书笔记(2)
- Mvvm Light Toolkit for WPF/Silverlight系列之搭建mvvmlight开发框架
- java答疑
- BZOJ 1030 [JSOI2007]文本生成器
- Centos6.4在配置Tomcat7工作文件夹和虚拟路径
- sass安装步骤
- 重定向和servlet生命周期
- nginx 配置proxy_pass URL末尾加与不加/(斜线)的区别
- Centos发布java的war包后,无法访问发布的工程
- UnzipUtil
- Leetcode 中Linked List Cycle 一类问题
- linux 命令基础一。
- NOIP 2016 换教室 (luogu 1850 &; uoj 262) - 概率与期望 - 动态规划
- nginx 和 php超时设置
- CF258D Little Elephant and Broken Sorting (带技巧的DP)
- MongoDB之集合管理一