当我们需要访问某个页中的数据时,就会把该页从磁盘加载到 Buffer Pool 中,如果该页已经在 Buffer Pool 中的话直接使用就可以了。那么问题也就来了,我们怎么知道该页在不在 Buffer Pool 中呢?难不成需要依次遍历Buffer Pool 中各个缓存页么?
我们其实是根据表空间号 **+ **页号来定位一个页的,也就相当于表空间号 + 页号是一个 key,缓存页就是对应的 value,怎么通过一个 key 来快速找着一个value 呢?
所以我们可以用表空间号 + 页号作为 key,缓存页作为 value 创建一个哈希**表**,在需要访问某个页的数据时,先从哈希表中根据表空间号 + 页号看看有没有对应的缓存页,如果有,直接使用该缓存页就好,如果没有,那就从 free 链表中选一个空闲的缓存页,然后把磁盘中对应的页加载到该缓存页的位置。