在SQL Server中,针对唯一标识符ID列使用聚集主键

3
如果您的表中的ID列是唯一标识符(Guid),那么在ID列上创建聚集主键是否有意义?
考虑到它们是全局唯一的,排序如何工作?
4个回答

5

我强烈建议不要使用聚集的 Guid 键... 几年前由于这种糟糕的设计导致我们在 SQL Server 上遇到了严重的性能问题。

另外请查看:改善聚集索引 GUID 主键的性能


5

GUID作为它们本身就是可怕的性能,因为它们有效地是随机值(这“破坏”了聚簇索引),而且它们对于索引来说非常糟糕,因为单个页面/范围(SQL Server术语)上适合较少的条目。 SQL Server 2005引入了newsequentialid(),有助于解决第一个问题。


3
在一个guid列上创建聚集索引并不是个好主意(除非你正在使用顺序guid)。
聚集索引决定了记录的物理存储顺序。这意味着,如果你在一个不按顺序增长的列上创建聚集索引,SQL Server将需要一些工作来确保在插入新记录时记录正确地按物理顺序排序。

1

在编程中,建立一个排序索引的想法本身非常好,因为这样搜索会变得非常高效。

然而问题在于,在GUID的情况下,我们从来不使用"WHERE GUID = xyz" 进行搜索。所以整个概念都被浪费了。因此,我建议最好在最常用作SARG的列上建立一条聚集索引,以提高查询的效率。


7
我认为“WHERE GUID = xyz”在选择单个记录时经常使用。但是“ORDER BY guid”则非常罕见。 - H H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接