“删除TOP(1)FROM @TEMP”或“DELETE FROM #TEMP WHERE ..”更快?

时间:2016-05-17 12:16:51

标签: sql-server sql-delete

我想知道哪一个在理论上要快得多?

IF EXISTS(SELECT TOP 1 1 FROM @ControlOrderList )
BEGIN
    SET @RowNumber= (SELECT TOP 1 id FROM @ControlOrderList)
    ...
    DELETE @ControlOrderList WHERE id=@RowNumber
END

还是这个更快?

IF EXISTS(SELECT TOP 1 1 FROM @ControlOrderList )
BEGIN
    SET @RowNumber= (SELECT TOP 1 id FROM @ControlOrderList)
    ...
    DELETE TOP 1 @ControlOrderList 
END

使用DELETE TOP 1是否安全?我可以信任SQL-SERVER删除“SELECT TOP 1 .....”中的行吗?

1 个答案:

答案 0 :(得分:1)

SQL Server针对IF EXISTS(SELECT * FROM TABLE)进行了优化,因此切换到理论上应该更快

SELECT TOP 1 id FROM @ControlOrderList不具有确定性,因为您没有ORDER BY子句。这意味着您甚至不能保证第一个语句每次都会删除同一行。

您需要查看执行计划,但我猜想,假设id被编入索引,一旦包含订单,两者都会做同样的事情。

相关问题