我有一个旧版应用程序,无论出于何种原因,它始终具有 GUID PK。不幸的是,其中一张表有 3.5+ 百万行,性能开始受到影响。我很确定这是因为 GUID 是 PK 并且是聚集索引的一部分。
我想将该表更改为具有聚集部分的 INT IDENTITY PK,并将当前聚集索引保留为非聚集索引。
我已经按照这些思路在这里阅读了一些内容(即 Clustered and nonclustered index performance),但我所阅读的所有内容都假设涉及单列。
这是我的情况变得令人困惑的地方(至少对我来说):
该表有一个基于 4 列的 PK/聚集索引!
我尝试创建一个具有相同架构的新表以及新的 int 标识列,但我无法将 PK 与聚集索引完全分开(如上面文章中所建议的那样)。
表架构:
ProjectItemID (PK, FK, uniqueidentifier, not null) <--- GUID
PermissionSourceType (PK, int, not null)
GranteeID (PK, uniqueidentifier, not null) <--- GUID
GranteeType (int, not null)
Access (int, not null)
PermissionType (PK, int, not null)
ExpirationDate (datetime, null)
如您所见,第 1、2、3 和 6 列都是 PK 的一部分。
如何编写新表的脚本(添加了 int 标识 PK),以便单列 PK 是聚集索引,但 OLD PK 字段位于非聚集索引中?
谢谢,凯文