【发布时间】:2019-04-09 23:38:08
【问题描述】:
在我们的应用程序中,我们可以撤消刚刚创建的任务的创建。 例如,我们将发出以下删除:
delete from task where taskid = 290313
这非常慢,最多可能需要 30 秒才能执行。
几十个表都有Task的外键,TaskId在所有表中都有索引。
查看执行计划,我可以看到许多读取索引中所有记录的索引扫描(非查找)。
为什么它使用完整的索引扫描而不是 Seek ?
我使用的是 Azure SQL 数据库最新版本。
[编辑]
任务表上的索引:
【问题讨论】:
-
你能列出那个表的索引吗?它使用的是 NC 扫描,而不是您在 PK 上默认使用的 Clustered Seek。但是,PK 不一定是聚集索引
-
您的意思是图中显示的 Task 表或 TaskTransitionLog 表?我可以提供完整的执行计划 xml,但我不知道如何在此处附加它...
-
您可以发布here,然后提供链接。但您也可以为该表提供
create index语句吗? -
哪个表? :-)
-
你要删除的那个:
task
标签: sql-server foreign-keys sql-delete sql-execution-plan sqlperformance