没有主键的聚簇索引

Nil*_*ish 5 sql-server sql-server-2005 clustered-index sql-server-2008

聚簇索引在索引的叶级存储实际数据的行.回到上面的示例,这将意味着与主键值123相关联的整个数据行将存储在该叶节点中.

在此输入图像描述

问题 - 如果主键不存在,我将Name列设置为聚簇索引.在这种情况下,上述陈述会变得矛盾吗?

mar*_*c_s 18

没有为什么?

聚簇索引仍然将实际数据页面存储在其叶级别(最初)按name列进行物理排序.

叶级上方的索引导航结构将包含name所有行的列值.

整体而言:没有任何变化.

主键是一个合乎逻辑的结构,设计为唯一标识表的每一行.这就是它必须是唯一且非空的原因.

聚簇索引是一种物理构造,将(最初)phyiscally数据通过聚集键和排序相应安排的SQL Server页面.

在SQL Server中,默认情况下主要用作聚类键,两者不必放在一起 - 也不必与另一个存在.您可以拥有包含非群集主键的表或没有主键的群集表.两者都是可能的.拥有它是否明智是另一个讨论 - 但它在技术上是可行的.

更新:如果您的主键是您的群集密钥,则保证唯一性(因为主键必须是唯一的).如果您选择的某些列不是主键作为您的群集键,并且该列不保证唯一性,则SQL Server将在幕后为这些重复值添加一个4字节(INT)唯一程序列他们独特.所以,你可能有Smith,Smith1,Smith2等你的聚集索引导航结构的史密斯.

看到: