在 Microsoft® SQL Server™ 中,数据存储的基本单位是 页 。在 SQL Server 2000 中,页的大小是 8 KB。这意味着 SQL Server 2000 数据库每兆字节有 128 页。
每页的开始部分是 96 字节的页首,用于存储系统信息,如页的类型、页的可用空间量、拥有页的对象的对象 ID 等。
下表显示 SQL Server 2000 数据库的数据文件中的八种页类型。
页类型 | 内容 |
---|---|
数据 | 包含数据行中除 text、ntext 和 image 数据外的所有数据。 |
索引 | 索引项。 |
文本/图像 | text、ntext 和 image 数据。 |
全局分配映射表、辅助全局分配映射表 | 有关已分配的扩展盘区的信息。 |
页的可用空间 | 有关页上可用空间的信息。 |
索引分配映射表 | 有关表或索引所使用的扩展盘区的信息。 |
大容量更改映射表 | 有关自上次执行 BACKUP LOG 语句后大容量操作所修改的扩展盘区的信息。 |
差异更改映射表 | 有关自上次执行 BACKUP DATABASE 语句后更改的扩展盘区的信息。 |
日志文件不包含页,而是包含一系列日志记录。
数据页包含数据行中除 text、ntext 和 image 数据外的所有数据,text、ntext 和image 数据存储在单独的页中。在数据页上,数据行紧接着页首按顺序放置。在页尾有一个行偏移表。在行偏移表中,页上的每一行都有一个条目,每个条目记录那一行的第一个字节与页首的距离。行偏移表中的条目序列与页中行的序列相反。
在 SQL Server 中,行不能跨页。在 SQL Server 2000 中,一行内最多包含的数据量是 8060 字节,不包括 text、ntext 和image 数据。
扩展盘区 是一种基本单元,可将其中的空间分配给表和索引。一个扩展盘区是 8 个邻接的页(或 64 KB)。这意味着 SQL Server 2000 数据库每兆字节有 16 个扩展盘区。
为了使空间分配更有效,SQL Server 2000 对只含少量数据的表不分配完整的扩展盘区。SQL Server 2000 有两种类型的扩展盘区:
- 统一扩展盘区由单个对象所有,扩展盘区中的所有八页只能由拥有该盘区的对象使用。
- 混合扩展盘区最多可由 8 个对象共享。
通常从混合扩展盘区中向新表或新索引分配页。当表或索引增长到 8 页时,就变成统一扩展盘区。如果在现有表上创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都在统一扩展盘区内进行。