【发布时间】:2019-05-14 01:55:19
【问题描述】:
我有一个使用 WHERE EXISTS 的删除查询,但速度很慢。
delete
from dwload.dbo.TF_Full_Backup_AT
where exists (select *
from dwload.dbo.TFTimesheetTemp t
inner join dwload.dbo.TFEmpTemp e on t.EmployeeCode = e.EmployeeCode
where dwload.dbo.TF_Full_Backup_AT.TFSourceID = e.TFSourceID
and dwload.dbo.TF_Full_Backup_AT.StartTime = t.StartTime
and dwload.dbo.TF_Full_Backup_AT.EndTime = t.EndTime
and dwload.dbo.TF_Full_Backup_AT.ActivityCode = t.ActivityCode
and dwload.dbo.TF_Full_Backup_AT.PaymentCode = t.PaymentCode
and dwload.dbo.TF_Full_Backup_AT.BranchCode = t.BranchCode)
我怎样才能重写这个查询以更快地运行?
【问题讨论】:
-
exists括号内的查询也慢吗?
-
@Hogan - 如果选择位于
exists子句中,则无关紧要。 -
至少您应该include the actual Execution Plan,您可以使用Paste the Plan 并在您的问题中分享链接。另外try to read it yourself,也许您可以通过查询找出性能问题。
-
@Hogan:因为它是
IF EXISTS()的一部分,所以没有数据被读取-所以SELECT *与SELECT 1没有区别 b> -
您要从中删除的表有多大?多少个索引/触发器?这可能很慢,因为在单个操作中记录所有删除活动所涉及的 I/O,而不是与用于查找要删除的行的查询有关。见this post。
标签: sql-server tsql where exists