2010-08-02 72 views
5

我理解数据库如何存储主键的限制是基于聚集键的b树,每个节点存储其余列。SQL Server如何存储复合主键?

自从上个世纪的大学以来,我还没有更新过这种理解,并且很想知道SQL Server如何存储与单个主键相比的复合主键。

任何人都可以帮我指出一些细节吗?

+2

我现在没有时间给出正确的答案,但只是提到实际上有3种不同的可能性在这里考虑(1)PK是聚集索引(2)PK是非聚集索引堆(3)PK是具有另一个聚簇索引的表上的非聚簇索引。 – 2010-08-02 00:38:48

+0

所以聚集索引是存储,而不是PK。我想我没有把这些物品看作同义词了。 – Nat 2010-08-02 03:47:52

回答

4

组合键与普通单列键完全相同,但较长且由多个值组成。考虑你在一列上有一棵B树,比如说A.非叶页面包含A列值的插槽和指向叶页面的指针。叶页包含带A列值(键)的槽,后面跟着该行的所有其他列。组合关键字完全相同,但槽中的值将是合成值,按照它们在关键字中声明的顺序排列。

Anatomy of a Page的SQL Server数据页的内部有很好的描述。此外,Kelan Delaney的旧版SQL 7.0书的第6章可在Technet上在线获得:Tables。仍然是一个很好的资源,基础仍然适用于SQL 2008 R2(更改的内容大多数都是最大类型和压缩设置,但大部分信息仍然有效)。