SqlServer 删除的性能优化
最近遇到个SqlServer 删除性能的问题。假设我们有如下的表定义
Create Table Tree
(
Id INT,
Name NVARCHAR(MAX),
ParentId INT,
PRIMARY KEY (Id),
FOREIGN KEY (ParentId) REFERENCES Tree(Id)
)
当我们Tree 表的数据量比较大的时候,我们删除其中的某些记录时,会有性能问题。原因是由于这个FK,每次删除的时候都会去扫描整个表,确保依赖删除项的记录也得删除掉。
解决办法
- 移除这个FK 的定义
- 创建一个Index 包含这个ParentId