这里收集整理了一系列数据库的索引知识,算是对索引知识的一个总结回顾吧。通过总结,你将发现自己以前很多很模糊的概念都清晰了很多。
不论是缓存的数据信息,还是物理保存的信息,他们的基本单位都是数据页。所以理解数据页是最最基础的知识点,本文就介绍跟索引有关的数据页的一些基础知识。
数据页的基础知识
SQL Server 中数据存储的基本单位是页(Page)。数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 每次读取或写入数据的最少数据单位是数据页。
注意:日志文件不是用这种方式存储的,而是一系列日志记录。
数据库被分成逻辑页面(每个页面8KB),并且在每个文件中,所有页面都被连续地从0到x编号,其中x是由文件的大小决定的。我们可以通过指定一个数据库ID、一个文件ID、一个页码来引用任何一个数据页。当我们使用ALTER DATABASE命令来扩大一个文件时,新的空间会被加到文件的末尾。也就是说,我们所扩大文件的新空间第一个数据页的页码是x+1。当我们使用DBCC SHRINKDATABASE或DBCC SHRINKFILE命令来收缩一个数据库时,将会从数据库中页码最高的页面(文件末尾)开始移除页面,并向页码较低的页面移动。这保证了一个文件中的页码总是连续的。
在 SQL Server 中,页的大小为 8 KB。这意味着 SQL Server 数据库中每 MB 有 128 页。依次类推。根据数据库的文件大小,我们可以算出数据库有多少数据页。
SQL Server 2005 有以下几种页类型:
页类型 | 内容 |
Data | 当 text in row 设置为 ON 时,包含除 text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 数据之外的所有数据的数据行。 |
Index | 索引条目。 |
Text/Image | 大型对象数据类型: text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 数据。 数据行超过 8 KB 时为可变长度数据类型列: varchar、nvarchar、varbinary 和 sql_variant |
Global Allocation Map、Shared Global Allocation Map | 有关区是否分配的信息。 |
Page Free Space | 有关页分配和页的可用空间的信息。 |
Index Allocation Map | 有关每个分配单元中表或索引所使用的区的信息。 |
Bulk Changed Map | 有关每个分配单元中自最后一条 BACKUP LOG 语句之后的大容量操作所修改的区的信息。 |
Differential Changed Map | 有关每个分配单元中自最后一条 BACKUP DATABASE 语句之后更改的区的信息。 |
数据页(Data 类型页)的结构示意图:
每页的开头是 96 字节的标头,用于存储有关页的系统信息。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元 ID。
在数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目。每个条目记录对应行的第一个字节与页首的距离。行偏移表中的条目的顺序与页中行的顺序相反。
新闻热点
疑难解答