"DELETE TOP (1) FROM @TEMP" 或 "DELETE FROM #TEMP WHERE.." 更快?

"DELETE TOP (1) FROM @TEMP" or "DELETE FROM #TEMP WHERE.." is faster?

我想知道在 THEORY 中哪个更快?

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 ....." 中得到的行吗?

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

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

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