读取并更新具有 2000 万条记录的 Oracle table
Read and update an Oracle table with 20 millions records
我有一种情况,我正在从备份中修复数据。
Table MAIN TABLE (PrimaryKey, Value) and Table BACKUP(PRIMARYKEY, Value).
我想在 MAIN Table 中找到 value=0 的所有记录,然后从 table BACKUP 中获取相同主键的值并更新 MAIN Table .
- 有 2000 万条记录值为 0
- 更新和获取都是使用主键完成的
问题
存储过程?脚本?
获取和更新是在同一个 table 上完成的?有什么顾虑吗?
你认为这需要多少时间- 球场数字。如何测试?
我想的解决方案:
使用我的条件(值=0)在 Table Main 上打开游标,然后从 BACKUP 获取值,然后更新。在循环中提交每 10K 次更新
有什么想法吗?
你可以试试Oracle的MERGE
。
确保在将查询应用到主表之前在测试表中进行测试。
MERGE INTO main_table m
USING backup_table b
ON (m.primary_key = b.primary_key)
WHEN MATCHED THEN
UPDATE SET m.value = b.value
WHERE m.value = 0;
UPDATE MAIN_TABLE
SET main.value=back.value
FROM MAIN_TABLE as main
JOIN BACKUP_TABLE as back ON main.pk=back.pk
WHERE main.value=0
这是我找到如何执行此操作的地方:
https://chartio.com/resources/tutorials/how-to-update-from-select-in-sql-server/
我有一种情况,我正在从备份中修复数据。
Table MAIN TABLE (PrimaryKey, Value) and Table BACKUP(PRIMARYKEY, Value).
我想在 MAIN Table 中找到 value=0 的所有记录,然后从 table BACKUP 中获取相同主键的值并更新 MAIN Table .
- 有 2000 万条记录值为 0
- 更新和获取都是使用主键完成的
问题
存储过程?脚本?
获取和更新是在同一个 table 上完成的?有什么顾虑吗?
你认为这需要多少时间- 球场数字。如何测试?
我想的解决方案:
使用我的条件(值=0)在 Table Main 上打开游标,然后从 BACKUP 获取值,然后更新。在循环中提交每 10K 次更新
有什么想法吗?
你可以试试Oracle的MERGE
。
确保在将查询应用到主表之前在测试表中进行测试。
MERGE INTO main_table m
USING backup_table b
ON (m.primary_key = b.primary_key)
WHEN MATCHED THEN
UPDATE SET m.value = b.value
WHERE m.value = 0;
UPDATE MAIN_TABLE
SET main.value=back.value
FROM MAIN_TABLE as main
JOIN BACKUP_TABLE as back ON main.pk=back.pk
WHERE main.value=0
这是我找到如何执行此操作的地方: https://chartio.com/resources/tutorials/how-to-update-from-select-in-sql-server/