"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,两者都会做同样的事情。
我想知道在 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,两者都会做同样的事情。