数据库:表和索引结构
表和索引是如何组织和使用的,在很大程度上取决于具体的关系型DBMS,然而它们都依赖于大致相似的结构和原则。
索引页和表页
表行和索引行都被存储在页中。页的大小一般为4kb,这是一个可以满足大部分需求的大小,也可以是其他大小,这不是一个重要的考虑点。页的大小仅仅决定了一个页可以存储多少个索引行、表行,以及一共需要多少页来存储表或者索引。
缓冲池和I/O活动都是基于页的,一次将一个完整的页读取到缓冲池。
索引行
对于一个唯一索引,一个索引行等同于叶子页中的一个索引条目。字段的值从表中复制到索引上,并加上一个指向表中记录的指针。
对于一个非唯一索引,一个特定的索引值所对应的索引行应该被想象成独立的索引条目,每一个索引条目都含有相同的索引值,但是却有不同的指针。
大多数情况下,非唯一索引的实际存储方式是一个索引值后带着多个指针。
索引结构
非叶子页通常包含着一个键值,以及一个指向下一层级页的指针,该键值是下一层级页中的最大键值,多个索引层级按照这一方式逐层建立,直到只剩下一个页——根页。这种组织方式的索引叫做B树索引。通过这种索引方式查找任何一条索引记录都需要访问相同数量的非叶子页。
表行
每一个索引行都指向表中相对应的一行记录,指针通常标识了记录所存放的页以及它在页中的位置。
表中的每一行除了存储行的字段以外,还包含了一些控制信息用于定义行并帮助DBMS处理插入或者删除操作。
当加载表或者向表中插入记录的时候,表中记录的顺序可以被定义成和它的某一个索引记录相同的顺序。在这种情况下,当索引行被按顺序处理时,对应的表行也将依照相同的顺序逐个处理,这是一个效率很高的过程。