som*_*elp 6 sql-server clustered-index index-tuning physical-design nonclustered-index
假设我有一个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?我将始终拥有SchoolIdif 我需要搜索 by Id,所以无论如何我都会使用聚集索引,如果我只需要搜索 by SchoolId,记录将在物理上彼此相邻。
如果我要进行任何类型的搜索或批量更新,它们会在SchoolId特定记录上,例如找到所有带有姓名/号码/任何内容的孩子SchoolId。我永远不会SchoolId在同一事务中跨多个s执行这些类型的操作。让这些记录在物理上彼此相邻的好处是否使这种方法比简单地在 上使用聚集索引要好得多Id?
使用后者有很大的缺点吗?我还是个新手,有很多主题我还没有完全理解(例如碎片化)以及它如何影响这种情况。
如果您始终拥有SchoolId,那么您可以从使聚集索引成为复合键中受益,SchoolId, Id因为您不必使用额外的索引SchoolId来避免表扫描。没有附加索引将使插入/更新/删除更快地完成,因为事务只需更新一个索引。
您可能会发现,当您创建使用 where 子句中其他字段的其他查询时,这些字段上的附加索引可能会有所帮助,因此 SQL Server 可以直接查找该索引叶,这将有助于减少返回的行数。
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |