正文
如果数据库只按这样的方式存储,那么如何查找数据就成为一个问题
因为我们不知道要查找的数据存在哪个页中,也不可能把所有的页遍历一遍,那样太慢了。
所以人们想了一个办法,用 B + 树的方式组织这些数据。如图所示:
我们先将数据记录按主键进行排序,分别存放在不同的页中(为了便于理解我们这里一个页中只存放 3 条记录,实际情况可以存放很多)
除了存放数据的页以外,还有存放键值 + 指针的页,如图中 page number=3 的页,该页存放键值和指向数据页的指针,这样的页由 N 个键值 + 指针组成。
当然它也是排好序的。这样的数据组织形式,我们称为索引组织表。
现在来看下,要查找一条数据,怎么查?
如:select * from user where id=5;
这里 id 是主键, 我们通过这棵 B + 树来查找,首先找到根页,你怎么知道 user 表的根页在哪呢?
其实每张表的根页位置在表空间文件中是固定的,即 page number=3 的页(这点我们下文还会进一步证明)
找到根页后通过二分查找法,定位到 id=5 的数据应该在指针 P5 指向的页中,那么进一步去 page number=5 的页中查找,同样通过二分查询法即可找到 id=5 的记录:
5