我想知道哪個更有效以及為什么。
if not exists (select 1 from table where ID = 101 and TT = 5)
begin
update table
set TT = 5
where ID = 101;
end;
或者
update table
set TT = 5
where ID = 101 and TT <> 5;
假設 ID 上有一個聚集索引(沒有更多的表使用默認表創建設定)
uj5u.com熱心網友回復:
WHERE、IF EXISTS 和 IN 都有不同的性能優勢。我建議查看這兩篇文章。
https://www.sqlshack.com/t-sql-commands-performance-comparison-not-vs-not-exists-vs-left-join-vs-except/
https://sqlchitchat.com/sqldev/tsql/semi-joins-in-sql-server/
uj5u.com熱心網友回復:
SQL Server 通常會將非更新優化UPDATE為不實際發布任何更新。因此,使用簡單的表格,您不會看到太大的差異。
- 如果您有觸發器,它們將在
UPDATE陳述句執行時被觸發,與更新了多少行無關。- 如果
UPDATE陳述句在行上執行,即使它們被修改為相同的值,它們也會出現在觸發器中。 WHERE例如and TT <> 5,如果使用子句過濾掉行,則觸發器將觸發 0 行
- 如果
rowversion并且GENERATED AS列將無論如何更新。- 聚集鍵列將導致整行的洗掉和插入。
- 如果
ALLOW_SNAPSHOT_ISOLATION或READ_COMMITTED_SNAPSHOT開啟,即使沒有被使用,那么由于行版本控制的作業方式,將始終進行實際更新。 - 如果
IF EXISTS是復雜的,它可能仍然不值得做,但在簡單的情況下通常是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/325209.html
標籤:sql-server 查询语句 索引
下一篇:無法獲取指向控制臺的檔案描述符 (couldn't get a file descriptor referring to the console)
