在一个表中更新几百万行的列

时间:2016-01-26 13:52:41

标签: sql oracle plsql

我需要从一个包含几百万行的表中更新两列。这样做最有效的方法是什么?

会是这样的:

update my_table set column_one = to_date('11/11/11', 'RR/MM/DD'),
                    column_two = to_date('11/11/11', 'RR/MM/DD');

或者这个:

update my_table set column_one = to_date('11/11/11', 'RR/MM/DD');
update my_table set column_two = to_date('11/11/11', 'RR/MM/DD');

还是有更好的方法?

2 个答案:

答案 0 :(得分:2)

更新具有百万行的表的最有效方法是根本不执行更新操作,而是创建具有更新值的新表。

  
      
  1. 创建时创建一个包含更新列的新表。
  2.   
  3. 请注意所有同义词,助手,限制,索引。
  4.   
  5. 放下旧桌子。
  6.   
  7. 将新表重命名为旧表。
  8.   
  9. 重新创建的拨款,同义词,约束,索引。
  10.   

答案 1 :(得分:0)

如果您不想创建新表,只需将其分解为块即可。

update my_table set column_one = to_date('11/11/11', 'RR/MM/DD'),
                    column_two = to_date('11/11/11', 'RR/MM/DD')
where rownum < 1000 
AND column_one <> to_date('11/11/11', 'RR/MM/DD')
AND column_two <> to_date('11/11/11', 'RR/MM/DD');

@ Incognito的回答可能更有效。如果您对“高效”的意义具有影响力,请尝试这种方式。花在编写代码上的时间减少了。