将GUID PK替换为INT IDENTITY PK



我有一个遗留的应用程序,无论出于什么原因,有GUID pk贯穿始终。不幸的是,其中一个表有350多万行,性能开始受到影响。我很确定这是因为GUID是PK的,是聚集指数的一部分。

我想把这个表修改为一个INT IDENTITY PK,用于聚集部分,并保留当前的聚集索引作为非聚集索引。

我在这里读过一些关于这方面的东西。聚类和非聚类索引性能),但我读到的所有内容都假设单列参与。

我的情况让我感到困惑(至少对我来说):

这个表有一个基于4列的PK/Clustered Index !

我尝试创建一个具有相同模式和新的int identity列的新表,但是我无法将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)

如你所见,第一,二,三列&6都是PK的一部分。

我如何编写新表(添加int identity PK),使单列PK是聚集索引,但旧PK字段在非聚集索引中?

谢谢,凯文

这是相当简单的,实际上,当你按照这些步骤(我假设T-SQL语法对你来说不是一个麻烦):

  1. 删除PK(从而删除聚集索引)
  2. 添加一个包含4列的非聚集UNIQUE索引
  3. 添加IDENTITY列
  4. 为PK添加集群PK约束

相关内容

  • 没有找到相关文章

最新更新