如果我运行 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 是用户表的主键。该索引是否比表中已有的索引更好:
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]
最佳答案
是的,主键始终是索引。
如果表上没有任何其他聚集索引,那么这很简单:聚集索引使表的每个操作都更快。是的!确实如此。请参阅 Kim Tripp 的精彩 The Clustered Index Debate continues获取背景信息。
实际上,每个有用的表(除了用于批量加载的临时表或其他一些罕见情况)都应该有一个聚集索引。如果您没有,很明显 DTA 会推荐一个,并默认将其放在主键列上。
关于sql-server - 主键自动成为索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434502/