没有聚簇索引的表

时间:2013-05-21 09:03:33

标签: sql sql-server indexing

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

  

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

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

有人可以澄清吗?

2 个答案:

答案 0 :(得分: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>

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

文件不言自明,页面是文件中的8K块,插槽是页面中的记录编号(记录TOC存储在每页的标题中)

答案 1 :(得分:1)

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

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

MSDN article: Tables and Index Data Structures Architecture