如何在 SQL 服务器中创建聚簇索引同时仍保留主键?
How to create a clustered index in SQL Server while still preserving the primary key?
我有一个名为 Players
的 table,其中包含这些列
Id, Name, Age
Id
和 Age
是整数,Name
是 char(50)
.
我想在此 table 上创建聚集索引,以便 table 将按 Name
的升序排序。我发现每个带主键的table已经在主键上有一个聚簇索引,而table上只能有一个聚簇索引,如果我想添加另一个,我必须删除 Id
.
上的主键约束
我的Player.Id
已经是多个其他table中的外键了,所以我仍然想在Id
上有主键约束,但我也想要一个聚集索引按名称对记录进行排序。
如何在 SQL 服务器中执行此操作?我正在使用 Microsoft SQL Server Management Studio。
您需要:
- 首先删除对您的 table
Player
的所有 FK 约束
- 然后在
Id
上删除主聚集索引
- 在
Player.Id
上创建一个带有 非聚集 索引的新主键 - 使用此命令:
ALTER TABLE dbo.Player ADD CONSTRAINT PK_Player PRIMARY KEY NONCLUSTERED (Id);
- 然后在
Player.Name
上创建聚簇索引
- 重新建立从所有 table 到
Player
的所有 FK 约束
我有一个名为 Players
的 table,其中包含这些列
Id, Name, Age
Id
和 Age
是整数,Name
是 char(50)
.
我想在此 table 上创建聚集索引,以便 table 将按 Name
的升序排序。我发现每个带主键的table已经在主键上有一个聚簇索引,而table上只能有一个聚簇索引,如果我想添加另一个,我必须删除 Id
.
我的Player.Id
已经是多个其他table中的外键了,所以我仍然想在Id
上有主键约束,但我也想要一个聚集索引按名称对记录进行排序。
如何在 SQL 服务器中执行此操作?我正在使用 Microsoft SQL Server Management Studio。
您需要:
- 首先删除对您的 table
Player
的所有 FK 约束
- 然后在
Id
上删除主聚集索引
- 在
Player.Id
上创建一个带有 非聚集 索引的新主键 - 使用此命令:ALTER TABLE dbo.Player ADD CONSTRAINT PK_Player PRIMARY KEY NONCLUSTERED (Id);
- 然后在
Player.Name
上创建聚簇索引
- 重新建立从所有 table 到
Player
的所有 FK 约束