如果表上的 ID 列是唯一标识符 (Guid),那么在 ID 列上创建聚集主键有什么意义吗?
鉴于它们是全球唯一的,排序将如何工作?
如果表上的 ID 列是唯一标识符 (Guid),那么在 ID 列上创建聚集主键有什么意义吗?
鉴于它们是全球唯一的,排序将如何工作?
我强烈建议不要使用集群 Guid 密钥...由于几年前设计如此糟糕,我们在 SQL 服务器上遇到了很大的性能问题。
另请查看:提高集群索引 GUID 主键的性能
GUID 因为它们实际上是随机值(这会“破坏”聚集索引),所以它们对性能很糟糕,而且它们对索引很糟糕,因为更少的条目适合单个页面/范围(SQL Server 术语)。SQL Server 2005 引入newsequentialid()
了帮助解决第一个问题的方法。
将聚集索引放在 guid 列上并不是一个好主意(除非您正在使用顺序 guid)。
聚集索引确定记录存储方式的物理顺序。
这意味着,如果您将聚集索引放在不按顺序增长的列上,SQL Server 将进行一些工作以确保在您插入新记录时记录在物理上正确排序。
拥有排序索引的想法本身非常好,因为搜索变得非常有效。
然而问题是,在 GUID 的情况下,永远不会使用“WHERE GUID = xyz”进行搜索。所以整个概念都被浪费了。因此,我建议宁愿在最常用作 SARG 的列上设置聚集索引,以提高查询效率。