我有一个遗留应用程序,无论出于何种原因,它始终具有GUID PK。不幸的是,其中一个表有350多万行,性能开始受到影响。我很确定这是因为GUID是PK并且是聚集索引的一部分。
我想将该表更改为具有集群部分的INT IDENTITY PK,并将当前的聚簇索引保留为非集群。
我已经在这些方面阅读了一些内容(即Clustered and nonclustered indexes 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和1列6都是PK的一部分。
如何编写新表的脚本(添加了int identity PK),以便单列PK是聚簇索引,但OLD PK字段是非聚集索引?
谢谢, 凯文
答案 0 :(得分:4)
实际上,当你按照这些步骤(我假设T-SQL语法不是你的麻烦)时,这很简单: