ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一亿条数据的更新方法

一亿条数据的更新方法

原创 Linux操作系统 作者:fengjin821 时间:2009-06-27 12:51:31 0 删除 编辑

现在有一事实表,表上按时间分区,总共有1亿多条,有几个分区较大,4000多万数据.现在需要update这个表中的其中4个列,当这几个列为空时更新为-1.我实在是担心这个更新的速度,各位有没有什么好的办法啊

select count(1) from fact_sales;

COUNT(1)               
----------------------
111064378


 

一个一个分区进行更新

1. create table temp as select * from partion_table where 1=2;

2. alter table temp nologging;

3. alter table partion_table exchange partition part1 with table temp including indexes without validation;

4. 更新temp表的四个列,当这几个列为空时更新为-1

5. alter table partion_table exchange partition part1 with table temp including indexes without validation;



loop

part2  part3  part4  ...

 

---------------------------------------------

 

一亿条数据不算太大,如果你的表不是提供7*24联机服务,则可以参考如下步骤:


1. CREATE TABLE NEW_TABLE PARALLEL X AS SELECT * FROM OLD_TABLE WHERE 1=2;


2. ALTER TABLE NEW_TABLE NOLOGGING;


3.
alter session force parallel ddl parallel x;
alter session force parallel dml parallel x;
alter session force parallel query parallel x;
insert /*+ append parallel(new_table,x) */ into new_table as
select xxx,nvl(a,-1),nvl(b,-1),nvl(c,-1),nvl(d,-1),xxx from old_table;


4.

alter session force parallel ddl parallel x;
alter session force parallel dml parallel x;
alter session force parallel query parallel x;
alter session set workarea_size_policy=manual;
alter session set sort_area_size=2000000000;
alter session set sort_area_retained_size=2000000000;
create index xxx no logging parallel x;
alter index xxx noparallel;
......
--如果是分区索引,则创建索引会更快


5. alter table new_table noparallel;


6. switch table name

只要字段不太多,机器不太差,相信两个小时应该足够了

 

 


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13165828/viewspace-607718/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-29

  • 博文量
    191
  • 访问量
    505019