我有一个遗留的应用程序,无论出于什么原因,有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语法对你来说不是一个麻烦):
- 删除PK(从而删除聚集索引)
- 添加一个包含4列的非聚集UNIQUE索引
- 添加IDENTITY列
- 为PK添加集群PK约束