我需要在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在后面有一些优化,其中更新的字段与将要设置的值相同。
答案 0 :(得分:1)
问题是,我可以使用WHERE子句或没有它来完成此操作。没有WHERE语句我有1M更新,有了它我有1M检查+ 20K更新。我在问哪一个更好。
在我看来1M checks + 20K updates
更好。原因:
1)更新需要更新的行,没有必要进行身份操作A => A
2)如果你在那张桌子上有触发器,你可能会遇到麻烦。
更新LAST_UPDATE
日期(对于每次合并调用,整个表格都会发生变化)
插入历史记录表(大量重复)
3)您可以使用自动刷新
在该表的顶部显示物化视图4)更新索引/检查外键的额外开销