如果我有一个UPDATE
实际上没有改变任何数据的语句(因为数据已经处于更新状态)。在WHERE
子句中进行检查以防止更新是否有任何性能优势?
例如,以下 UPDATE 1 和 UPDATE 2 之间的执行速度是否有任何差异:
CREATE TABLE MyTable (ID int PRIMARY KEY, Value int);
INSERT INTO MyTable (ID, Value)
VALUES
(1, 1),
(2, 2),
(3, 3);
-- UPDATE 1
UPDATE MyTable
SET
Value = 2
WHERE
ID = 2
AND Value <> 2;
SELECT @@ROWCOUNT;
-- UPDATE 2
UPDATE MyTable
SET
Value = 2
WHERE
ID = 2;
SELECT @@ROWCOUNT;
DROP TABLE MyTable;
Run Code Online (Sandbox Code Playgroud)
我问的原因是我需要行数来包含未更改的行,所以我知道如果 ID 不存在是否进行插入。因此,我使用了 UPDATE 2 表单。如果使用 UPDATE 1 表单有性能优势,是否有可能以某种方式获得我需要的行数?