2

我试图了解索引并从这篇 msdn文章开始。它说,

当表存储为堆时,各个行通过引用由文件号、数据页号和页上的槽组成的行标识符 (RID) 来标识。

我不知道“文件号、数据页码和页面上的插槽”是什么意思

任何人都可以澄清一下吗?

4

2 回答 2

3

使用聚簇表时,索引记录存储表记录的聚簇键(逻辑标识符)。

比如说,如果您使用这样的聚集主表:

id   name
1    Jonh
2    Alice

并在 上创建索引name,索引将存储这些数据:

name   row_pointer
Alice  2
John   1

如果您的表是堆,则索引将存储指向该表的物理指针:

name   row_pointer
Alice  <file C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db.mdf, page 1234, slot 2>
John   <file C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db.mdf, page 1234, slot 1>

(这当然在其真正的二进制形式中看起来更紧凑)

file 不言自明,page 是文件中的 8K 块,slot 是页面中的记录号(记录 TOC 存储在每个页面的 header 中)

于 2013-05-21T09:27:12.090 回答
1

堆是数据页的集合。页面是 Microsoft SQL Server 中数据存储的最小单位,包含行中的数据。一行只能驻留在一页中。

如果您想了解更多关于 SQL Server 内部的详细信息,那么也许可以阅读 Kalen Delaney 的 Microsoft® SQL Server® 2008 Internals。过去我发现她的书很有帮助。

MSDN 文章:表和索引数据结构体系结构

于 2013-05-21T09:09:23.127 回答