在我的表中,我以ID作为主键,这只是毫无意义的唯一代码
因为它是SQL Server 2017的主键,所以使其成为群集。
我的表中还有另一列myTime,这是带有非uinique非聚集索引的时间戳记
我可以使PK成为非聚类并且索引是聚类的吗?
答案 0 :(得分:1)
是的,可以通过指定主键为非集群键。
ALTER TABLE TableName
ADD CONSTRAINT PK_name PRIMARY KEY NONCLUSTERED (ID);
您通过指定聚簇索引使另一个索引聚簇。
CREATE CLUSTERED INDEX IX_Name
ON dbo.TableName (ColumnName);
答案 1 :(得分:1)
可以。如果您已经有一个表,则需要:
PRIMARY KEY
CLUSTERED INDEX
PRIMARY KEY NONCLUSTERED
例如:
IF OBJECT_ID('tempdb..#Test') IS NOT NULL
DROP TABLE #Test
CREATE TABLE #Test (
ID INT,
TimeStamp DATETIME,
CONSTRAINT PK_Test PRIMARY KEY (ID)) -- Clustered by default
ALTER TABLE #Test DROP PK_Test
CREATE CLUSTERED INDEX CI_Test_TimeStamp ON #Test (TimeStamp)
ALTER TABLE #Test ADD CONSTRAINT PK_Test PRIMARY KEY NONCLUSTERED (ID)
唯一强制实施唯一性的是PRIMARY KEY
约束,尽管可能会引起性能的困扰,但您仍然可以在重复值上具有聚簇索引。有关详细信息,请参见Eric的链接。