【发布时间】:2010-10-17 08:08:21
【问题描述】:
如果您在表上的 ID 列是唯一标识符 (Guid),那么在 ID 列上创建 聚集 主键有什么意义吗?
鉴于它们是全球唯一的,排序将如何工作?
【问题讨论】:
标签: sql-server primary-key uniqueidentifier
如果您在表上的 ID 列是唯一标识符 (Guid),那么在 ID 列上创建 聚集 主键有什么意义吗?
鉴于它们是全球唯一的,排序将如何工作?
【问题讨论】:
标签: sql-server primary-key uniqueidentifier
GUID 对于性能来说很糟糕,因为它们实际上是随机值(这会“破坏”聚集索引),而且它们对于索引来说也很糟糕,因为单个页面/范围内的条目较少(SQL Server 术语)。 SQL Server 2005 引入了newsequentialid(),这有助于解决第一个问题。
【讨论】:
我强烈建议不要使用集群 Guid 密钥...由于几年前设计如此糟糕,我们在 SQL Server 上遇到了很大的性能问题。
另请查看:Improving performance of cluster index GUID primary key
【讨论】:
在 guid 列上放置聚集索引并不是一个好主意(除非您使用顺序 guid)。
聚集索引决定了记录的物理存储顺序。
这意味着,如果您将聚集索引放在不按顺序增长的列上,SQL Server 将在您插入新记录时确保记录在物理上正确排序。
【讨论】:
拥有排序索引的想法本身非常好,因为搜索变得非常有效。
但问题是,如果是 GUID,则永远不会使用“WHERE GUID = xyz”进行搜索。所以整个概念都被浪费了。所以我建议宁愿在最常用作 SARG 的列上建立一个聚集索引,以提高查询效率。
【讨论】: