假设我有一个Student
像这样的人为表:
CREATE TABLE Student (
Id IDENTITY INT,
SchoolId INT NOT NULL,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
本能地,我会制作Id
主键(以及聚集索引)。但是,我会发现自己在搜索,SchoolId
因此我会在SchoolId
.
这与主键(和聚集索引)相比如何SchoolId, Id
?我将始终拥有SchoolId
if 我需要搜索 by Id
,所以无论如何我都会使用聚集索引,如果我只需要搜索 by SchoolId
,记录将在物理上彼此相邻。
如果我要进行任何类型的搜索或批量更新,它们会在SchoolId
特定记录上,例如找到所有带有姓名/号码/任何内容的孩子SchoolId
。我永远不会SchoolId
在同一事务中跨多个s执行这些类型的操作。让这些记录在物理上彼此相邻的好处是否使这种方法比简单地在 上使用聚集索引要好得多Id
?
使用后者有很大的缺点吗?我还是个新手,有很多主题我还没有完全理解(例如碎片化)以及它如何影响这种情况。
sql-server clustered-index index-tuning physical-design nonclustered-index