甲骨文 |在与其他 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;
我有两个巨大的 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;