2017-11-10 160 views
2

我被唯一索引更新单列SQL更新单列,Where子句

UPDATE Users SET Enabled=1 WHERE Id=1 

它使关于执行速度,以检查它是否已经Enabled意义吗?

UPDATE Users SET Enabled=1 WHERE Id=1 AND Enabled<>1 
+1

您必须指定专门的RDBMS,他们的言行举止变化基于数据库引擎。 – Andrew

+1

您定义了哪些索引? - 例如,如果你有一个在id上定义的索引,但没有启用,那么第二种方式将会变慢而不是变快。 – Hogan

+0

Id是唯一索引,Enabled不是(它可以是0或1) – Molochnik

回答

1

我喜欢写那些幂等SQL脚本:

UPDATE Users 
SET Enabled=1 
WHERE Id=1 
    AND Enabled<>1; -- if column is defined as NOT NULL 

方案:

  • 触发一个写入影子/历史记录表(它会触发一次)
  • 最后更新日期(只会更改一次)
  • 更改跟踪不会将行标记为已更新
  • 也许慢,但比较一致的
+0

附加子句可以使SQL更慢吗?不是更快?即使假设有相当数量(20%-80%)的案例行未更新。正如我所看到的,没有情况是我的情况,我只需要确保Enabled尽可能快,仅此而已。 – Molochnik