症状
假设某个表使用设置为级联删除的外键约束,并且外键列的统计信息未涵盖表中键值的整个范围 (例如:因为数据分布更改到表) 后未更新统计信息。 在此方案中,尝试删除与统计信息直方图中未表示的键值对应的行,并且查询优化器使用默认基数估算时,删除操作的速度低于预期。 还可能会注意到,索引扫描操作用于查找引用表中的匹配行。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
解决方案
以下累积更新中修复了此问题SQL Server:
注意: 仅在通过数据库范围的配置选项、查询提示或跟踪标志 4199 (打开优化器修补程序时,才启用此) 。
关于更新的累积SQL Server:
每个新的累积更新SQL Server包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看最新累积更新,了解SQL Server:
解决方法
若要解决此问题,请使用以下某种方法:
-
使用旧基数估算。 有关详细信息,请参阅基数估算 (SQL Server) 。
-
从外键定义中删除级联删除,然后使用父表和子表之间的 JOIN 执行删除操作,以完成等效的级联删除。
-
在删除数据之前,使用 FULLSCAN 更新父表的统计信息。
参考
了解 Microsoft 用于描述软件更新的术语。