【问题标题】:Clustered primary key on unique identifier ID column in SQL ServerSQL Server 中唯一标识符 ID 列上的聚集主键
【发布时间】:2010-10-17 08:08:21
【问题描述】:

如果您在表上的 ID 列是唯一标识符 (Guid),那么在 ID 列上创建 聚集 主键有什么意义吗?

鉴于它们是全球唯一的,排序将如何工作?

【问题讨论】:

    标签: sql-server primary-key uniqueidentifier


    【解决方案1】:

    GUID 对于性能来说很糟糕,因为它们实际上是随机值(这会“破坏”聚集索引),而且它们对于索引来说也很糟糕,因为单个页面/范围内的条目较少(SQL Server 术语)。 SQL Server 2005 引入了newsequentialid(),这有助于解决第一个问题。

    【讨论】:

      【解决方案2】:

      我强烈建议不要使用集群 Guid 密钥...由于几年前设计如此糟糕,我们在 SQL Server 上遇到了很大的性能问题。

      另请查看:Improving performance of cluster index GUID primary key

      【讨论】:

        【解决方案3】:

        在 guid 列上放置聚集索引并不是一个好主意(除非您使用顺序 guid)。

        聚集索引决定了记录的物理存储顺序。
        这意味着,如果您将聚集索引放在不按顺序增长的列上,SQL Server 将在您插入新记录时确保记录在物理上正确排序。

        【讨论】:

          【解决方案4】:

          拥有排序索引的想法本身非常好,因为搜索变得非常有效。

          但问题是,如果是 GUID,则永远不会使用“WHERE GUID = xyz”进行搜索。所以整个概念都被浪费了。所以我建议宁愿在最常用作 SARG 的列上建立一个聚集索引,以提高查询效率。

          【讨论】:

          • 我认为“WHERE GUID = xyz”在选择单个记录时使用了很多。但是 ab "ORDER BY guid" 是非常罕见的。
          猜你喜欢
          • 2010-10-23
          • 1970-01-01
          • 1970-01-01
          • 2015-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多