在我们的应用中,我们可以撤消刚刚创建的任务的创建。 例如,我们将发出以下删除操作:
delete from task where taskid = 290313
这非常慢,最多可能需要30秒才能执行。
数十个表都具有Task的外键,并且TaskId在所有表中都已建立索引。
查看执行计划,我可以看到许多索引扫描(非查找)可以读取索引中的所有记录。
为什么使用完整的索引扫描而不是“搜索”?
我正在使用Azure SQL数据库的最新版本。
[编辑]
任务表上的索引:
此处的查询计划:https://www.brentozar.com/pastetheplan/?id=SJtzfNyp7
答案 0 :(得分:0)
我删除并重新创建了所有外键,而没有级联删除。 现在执行计划正在使用有效的索引查找来检查所有FK上的RI。
不确定为什么启用级联删除会导致这些索引扫描...