假设我有一个包含以下各列的表:
Id int 身份,UserId
更好的方法是什么:
Making Id PRIMARY KEY CLUSTERED
Creating NONCLUSTERED Index on UserId
或者
Making Id PRIMARY KEY CLUSTERED
Creating NONCLUSTERED Index on UserId, Id
或者
Making Id PRIMARY KEY NONCLUSTERED
Creating CLUSTERED Index on UserId
或者
Making Id PRIMARY KEY NONCLUSTERED
Creating CLUSTERED Index on UserId, Id
或者
Just making a composite CLUSTERED PRIMARY KEY including both columns Id, UserId
更新
更新/删除基于 UserId 和 Id,而检索基于 UserId。
我主要是通过用户 ID 从表中读取数据。由于一个用户可以在此表中拥有多条记录,并且为了修改用户的特定记录(例如更新/删除操作),我需要 id 和 userid 来唯一标识该记录。
如果您可以更改主键的定义,并且对表的引用可以使用复合键(userid、id),则选项 5 很好。确保顺序是 (userid, id) 而不是 (id, userid)
在选项 5 中 - 如果有子表,它不仅应该通过 id 引用,还应该通过 userid 和 id 引用
更新 基于 SergeyA 和 Dan Guzman 评论的上述回答。看来选项5即复合键(userid, id)是最好的选择。因为它可能会优化通过 UserID 检索行以及指定两列时的更新/删除操作。
感谢大家的帮助。
使 Id 主键聚集并在 UserId 上创建非聚集索引:
使 Id 主键聚集并在 UserId、Id 上创建非聚集索引:
将 Id 设置为非聚集索引并在 UserId 上创建聚集索引:
将 Id 设置为非聚集索引并在 UserId、Id 上创建聚集索引:
制作一个复合的聚集主键,包括 Id 和 UserId 两列: