Oracle Sql:在更新之前检查数据库字段的值

时间:2017-10-19 12:29:28

标签: sql oracle performance sql-update

我需要在update语句中Merge Into一个表的字段,我正在做的是这样的

MERGE INTO A_TABLE a
USING (ANOTHER_TABLE b)
ON (SOME_PK)
WHEN MATCHED THEN
UPDATE 
SET a.field = b.field
WHERE a.field != b.field

我的问题是关于我检查这些值是equal or not的最后一行。我可以声称这些表之间可能只有%2 difference。在这种情况下,我使用WHERE条款会失败或赢得什么?对于这种情况,oracle在后面有一些优化,其中更新的字段与将要设置的值相同。

1 个答案:

答案 0 :(得分:1)

  

问题是,我可以使用WHERE子句或没有它来完成此操作。没有WHERE语句我有1M更新,有了它我有1M检查+ 20K更新。我在问哪一个更好。

在我看来1M checks + 20K updates更好。原因:

1)更新需要更新的行,没有必要进行身份操作A => A

2)如果你在那张桌子上有触发器,你可能会遇到麻烦。

  • 更新LAST_UPDATE日期(对于每次合并调用,整个表格都会发生变化)

  • 插入历史记录表(大量重复)

3)您可以使用自动刷新

在该表的顶部显示物化视图

4)更新索引/检查外键的额外开销