在学习buffer pool的时候我产生了疑问,buffer pool和查询缓存是一个东西吗?
结论:不是一回事。
buffer pool
buffer pool我之前介绍过,它的出现是为了提高查找效率,缓存磁盘上的数据页。
buffer pool虽说是内存中的一段连续空间,但是它实际上是介于存储引擎和数据层之间。可以把这个连续的空间看成是磁盘,先去这个“磁盘空间”去找,如果找不到再去实际的磁盘寻找,找到后存到buffer pool。
查询缓存
看上图,查询缓存是一个sql经历的第一个阶段,sql语句都会生成一个hash值作为key,查询结果就是value,有结果返回,没有结果生成hash值,进入语法解析阶段、优化器生成执行计划。
buffer pool在查询流程中的作用
有一个冷知识,数据和索引都是B+树进行管理的,B+树的根节点都是放在内存中的,也就是放在Buffer pool中。之后二分法找到下一层的非叶子节点,存到buffer pool进行操作,当然如果数据页缓存在buffer pool中就直接使用buffer pool中的缓存页,减少了磁盘的io交互。
总结
查询缓存和BufferPool完全是两个东西。查询缓存位于server层,BufferPool是Innodb数据引擎中的核心组件。