甲骨文 |在与其他 table 比较值后更新 huge table

Oracle | Update huge table after comparing values with other table

我有两个巨大的 table。我们称它们为 ITEM table(1807236 条记录)和 ITEM_PROD_DUMP table(796369 条记录)。 我需要使用第二个 table ITEM_PROD_DUMP 的值更新 ITEM table 中的两列 (total_volume_amount, total_volume_uom),其中它们的主键 (SYS_ITEM_ID)比赛。

我已经为此编写了一个查询,它有效但仅适用于少数记录。对于这些大量的记录,它只是保持在 运行.

谁能帮我写一个正确且最佳的查询。

我写的查询:

update item i set i.total_volume_amount = (select ipd.total_volume_amount
                                            from item_prod_dump ipd
                                            where i.sys_item_id = ipd.sys_item_id),
i.total_volume_uom = (select ipd.total_volume_uom
                    from item_prod_dump ipd
                    where i.sys_item_id = ipd.sys_item_id)
where exists (select ipd.total_volume_amount
            from item_prod_dump ipd
            where i.sys_item_id = ipd.sys_item_id);

使用MERGE语句。纯粹而简单。 180 万条记录并不是一个“庞大”的记录数。

merge into item t
using ( SELECT  *
        FROM    item_prod_dump ipd ) u
on ( t.sys_item_id = u.sys_item_id )
when matched then update set t.total_volume_amount = u.total_volume_amount,
                             t.total_volume_uom = u.total_volume_uom;