SQL通过PK删除单行非常慢

时间:2018-11-06 14:47:27

标签: sql-server foreign-keys sql-delete sql-execution-plan sqlperformance

在我们的应用中,我们可以撤消刚刚创建的任务的创建。 例如,我们将发出以下删除操作:

delete from task where taskid = 290313

这非常慢,最多可能需要30秒才能执行。

数十个表都具有Task的外键,并且TaskId在所有表中都已建立索引。

查看执行计划,我可以看到许多索引扫描(非查找)可以读取索引中的所有记录。 enter image description here

为什么使用完整的索引扫描而不是“搜索”?

我正在使用Azure SQL数据库的最新版本。

[编辑]

任务表上的索引:

enter image description here

此处的查询计划:https://www.brentozar.com/pastetheplan/?id=SJtzfNyp7

这是实时查询统计信息的结果,我们可以清楚地看到索引扫描所浪费的时间: enter image description here

1 个答案:

答案 0 :(得分:0)

我删除并重新创建了所有外键,而没有级联删除。 现在执行计划正在使用有效的索引查找来检查所有FK上的RI。

不确定为什么启用级联删除会导致这些索引扫描...