关系型数据库Page / B-Tree
B-Tree 页 是什么?
文件按固定大小的页组织(默认 4KB),页组成 B-Tree
类比:一本书按页装订,目录告诉你内容在第几页
页是 IO 单位
SQLite 读写磁盘的最小单位是页(page_size 默认 4096 字节),所有表、索引、溢出数据都落在页里。一个页要么是 B-Tree 的内部节点,要么是叶子节点。
页大小可以在建库时指定,大页适合顺序扫描,小页适合随机读写。改页大小需要重建数据库。
表 B-Tree 与索引 B-Tree
表用 B+Tree,叶子页存实际的行(rowid 表按 rowid 排序);索引也是 B-Tree,叶子存“索引键 + rowid”,查到了还要回表。所以和 MySQL 一样,覆盖索引能省一次回表。
为什么快
因为整个库在本地文件上,没有网络往返,页缓存命中时一次查询就是几次内存访问。同样的 SQL,SQLite 常常比走网络的 MySQL 快一个数量级——快在链路,不是快在算法。