我想知道哪一个在理论上要快得多?
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 .....”中的行吗?
答案 0 :(得分:1)
SQL Server针对IF EXISTS(SELECT * FROM TABLE)
进行了优化,因此切换到理论上应该更快
SELECT TOP 1 id FROM @ControlOrderList
不具有确定性,因为您没有ORDER BY
子句。这意味着您甚至不能保证第一个语句每次都会删除同一行。
您需要查看执行计划,但我猜想,假设id
被编入索引,一旦包含订单,两者都会做同样的事情。