在学习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数据引擎中的核心组件。










![[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式](https://img-blog.csdnimg.cn/direct/690a0118a8cf4dceb96f93dd7433e1a3.png)




![[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集](https://img-blog.csdnimg.cn/direct/afd3edae34f344878af3bad8d36e4b6e.gif#pic_center)



