sql-server - 主键自动成为索引吗?

标签 sql-server indexing primary-key constraints

如果我运行 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/

相关文章:

sql-server - 如何使用 LINQ 将记录添加到数据库?

sql-server - 如何在 SQL Server 中生成唯一的代码

c++ - 添加外部属性以包含图中顶点的索引( boost )

python - 检测列表列表中某些索引中的重复值

php 和 mysql 主键

sql - 将空值排序在最后而不是最前面

sql-server - SQL Server 2017相对路径问题

postgresql - 在 postgresql 中丢失索引

java - 准备好的语句不起作用,但当 UPDATE 在 mysql 中工作时在终端中写入

sql-server - 无法找到哪一行导致转换错误