TSQL性能 - 我应该检查要删除的数据还是只删除?

时间:2017-01-18 18:02:43

标签: performance tsql

我想为单个"会话"插入数据。从一张桌子到另一张桌子。在此之前,我想使用[唯一ID]列删除有关此同一会话的所有预先存在的数据。

我的问题是:

检查数据是否存在对我来说是否更有效率?然后删除它:

if (exists (select top 1 * from dbo.destinationTable where [Unique ID] = @unique_id))
begin;
    delete from dbo.destinationTable where [Unique ID] = @unique_id;
end;

或者,如果不先检查就运行delete语句更好:

delete from dbo.destinationTable where [Unique ID] = @unique_id;

1 个答案:

答案 0 :(得分:1)

对于更高效的答案,必须对数据库中的数据,数据库设计以及预期结果(而不是查询)执行更多操作。例如,如果要删除的表没有子表,并且您希望几乎所有时间都有要删除的记录,那么检查存在是浪费精力。另一方面,如果您经常没有要删除的记录,或者您可能会在级联删除中删除大量子记录,那么首先检查存在是否有意义。