【发布时间】:2011-06-03 14:30:44
【问题描述】:
我有一个存储员工详细信息的 SQLServer 表,列 ID 是 GUID 类型,而列 EmployeeNumber 是 INT 类型。大多数时候,我会在进行连接和选择条件时处理 EmployeeNumber。
我的问题是,将 PrimaryKey 分配给 ID 列而 ClusteredIndex 分配给 EmployeeNumber 是否明智?
【问题讨论】:
-
@Lamak:我很确定这是不正确的。一张表只能有一个聚集索引,但不一定要在主键上。
-
@Lamak:不正确。主键和聚集索引键不相关。
-
是的,没错,我的错。如果该表上没有其他聚集索引,则主键会自动创建聚集索引。
-
@Lamak 你的说法不正确。 SQL Server 数据库中的主键不必是集群的。创建列约束时,您可以指定 PRIMARY KEY NONCLUSTERED,然后将 CLUSTERED 索引应用于另一列。 (msdn.microsoft.com/en-us/library/aa258255(v=SQL.80).aspx)
-
分公司的数据将与总公司同步,在这种情况下,唯一可靠的 PK 类型被发现是 GUID。从您的所有回答中我可以理解的是,永远不要在 GUID 上使用聚集索引,这绝对使 EmployeeNumber 成为最适合聚集索引的列,而 PK 用于 ID。
标签: sql sql-server clustered-index