知识卡片
三种表组织方式的取舍:堆存储/顺序存储/索引存储
内容
把逻辑上的一张表实际存储成磁盘上的记录集合,有三种组织方式,各自 在”写入代价”和”顺序读取代价”之间做不同取舍。堆存储不关心记录之间 的顺序,只要块里有空闲位置就把新记录放进去,没有空闲位置就申请新块—— 写入代价最低(不需要挪动已有数据),但代价是记录在磁盘上的物理顺序 和任何有意义的逻辑顺序都无关,按某个关键字范围查询时无法利用顺序性 加速,只能全表扫描或依赖额外索引。顺序存储让记录按某个(或某组) 属性的取值顺序物理排列,好处是按这个属性做范围查询时可以直接顺序 读取、效率很高,但代价极高:插入一条新记录可能需要把它之后的所有 记录都物理挪动位置,或者维护复杂的指针链表来模拟顺序,维护成本随 数据量增长而急剧上升。索引存储是这两者的折中:数据本身按索引结构 (B树、哈希索引、位图索引等)组织,插入数据时既能保持”按索引能快速 定位”的效果,又不需要像顺序存储那样物理挪动数据——这也是绝大多数 现代数据库默认采用索引存储的原因,它避免了堆存储的”查询慢”和顺序 存储的”写入慢”两个极端,用索引结构的复杂度换来两头都还过得去的 折中性能。
参考来源
- 位置:《数据库原理(微课版)》第9章《数据库存储与索引》9.1.1节"文件
组织方式"(源文件:_epub-src/index_split_006.html)
- 结论依据:原文明确"堆存储:一条记录可存储在表的任何块中……顺序
存储:记录按某个或某组属性的取值顺序存放……此时,添加记录需要在
块内或块间物理移动记录,或者修改指向记录的指针,维护记录的顺序的
代价较大……索引存储:在表中按索引结构插入数据,既保持记录顺序又
避免移动数据",因此可以推出三种组织方式在写入代价与查询效率上的
权衡差异。
- 原始内容:顺序存储:记录按某个或某组属性的取值顺序存放……添加记录
需要在块内或块间物理移动记录,或者修改指向记录的指针,维护记录的
顺序的代价较大……索引存储:在表中按索引结构插入数据,既保持记录
顺序又避免移动数据。