基于join的Oracle 2000万次更新

时间:2016-02-03 06:09:12

标签: oracle performance plsql oracle11g

我需要做以下

  UPDATE TABLE2 t2
SET t2.product_id = (select t1.product_id from
table1 t1 where t1.matching_id = t2.matching_id)

除了TABLE2有2700万条记录。 product_id是一个新添加的列,因此会向其填充数据。 我可以使用游标,将我在TABLE2中的记录集分解为一个相当小的数字,但是有2700万条记录,我不确定最好的方法。 Pl建议,即使这意味着将我的数据导出到excel。

更新 - 匹配的列也被编入索引。

2 个答案:

答案 0 :(得分:1)

我唯一能做的就是替换CREATE TABLE AS

的更新
  CREATE TABLE table2_new AS
        SELECT t2.* (less product_id), t1.product_id
        FROM table1 t1
        JOIN table2 t2
          ON t1.matching_id = t2.matching_id

但稍后您必须手动添加CONSTRAINTS,删除table2并替换table2_new

答案 1 :(得分:0)

update (select t1.product_id as old_product_id, t2.product_id as new_product_id
        from table1 t1
        join table2 t2 on (t1.matching_id = t2.matching_id)) t
set t.new_product_id = t.old_product_id