INCLUDE の有無にかかわらず、インデックスを作成できます。PrimaryKeyCol がクラスター化インデックスの場合、 SQL Server はそれを無視します。つまり、クラスター化されたインデックス値を 2 回保存することはありません。
完全を期すために、クラスター化インデックスを変更した場合に備えて、おそらくそうするでしょう
編集:
SQL Server がこれをインテリジェントに処理するサイズを観察しましたこれは、 Kalen Delaney の非クラスター化インデックス キーの詳細
ほど科学的ではありません
DROP TABLE IncludeTest;
GO
CREATE TABLE IncludeTest (
BadClusteredKey uniqueidentifier DEFAULT NEWID() PRIMARY KEY,
OtherCol AS CHECKSUM(BadClusteredKey) % 10000,
Filler char(200) NOT NULL DEFAULT 'a and lots of spaces'
);
GO
INSERT IncludeTest (Filler) VALUES (DEFAULT);
GO
INSERT IncludeTest (Filler) SELECT Filler FROM IncludeTest
GO 20
SELECT COUNT(*) FROM IncludeTest;
EXEC sp_spaceused 'IncludeTest', 'true'
GO -- 400680 KB, 1920 KB
CREATE INDEX IX_OtherCol1 ON IncludeTest (OtherCol);
GO
EXEC sp_spaceused 'IncludeTest', 'true'
GO -- 400680 KB, 29024 KB KB
DROP INDEX IncludeTest.IX_OtherCol1
GO
EXEC sp_spaceused 'IncludeTest', 'true'
GO -- 400680 KB, 1920 KB
CREATE INDEX IX_OtherCol2 ON IncludeTest (OtherCol) INCLUDE (BadClusteredKey);
EXEC sp_spaceused 'IncludeTest', 'true'
GO -- 400680 KB, 29024 KB
DROP INDEX IncludeTest.IX_OtherCol2
GO
EXEC sp_spaceused 'IncludeTest', 'true'
GO -- 400680 KB, 1920 KB