如果我运行Profiler,那么它会建议很多像这样的索引
CREATE CLUSTERED INDEX [_dta_index_Users_c_9_292912115__K1] ON [dbo].[Users]
(
[UserId] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF) ON [PRIMARY]
UserId是表Users的主键。该指数是否优于表中已有的指数:
ALTER TABLE [dbo].[Users] ADD CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
答案 0 :(得分:24)
是的,主键始终是索引。
如果表上没有任何其他聚簇索引,那么很容易:聚簇索引使表更快,适用于每个操作。是!确实如此。有关背景信息,请参阅Kim Tripp的优秀The Clustered Index Debate continues。
实际上,每个有用的表(除了可能用于bulkload的临时表或其他一些罕见的情况)都应该有一个聚簇索引。如果你没有,很明显DTA会推荐一个,默认情况下把它放在主键列上。
答案 1 :(得分:6)
每个表都需要聚集索引和主键。默认情况下,PK是群集的,但如果你想要完成它,它可以是非群集的。
您已指定非群集PK,因此探查器会建议聚集索引...
注意:没有聚簇索引的表称为“堆”,因为它是一堆非结构化数据......
答案 2 :(得分:2)
本质上建议您将主键设置为聚簇索引而不是非聚簇索引。在大多数情况下,这将是一件好事。
答案 3 :(得分:1)
它更好,因为它是聚集的。