大数据量表 create table

来源:互联网 发布:金磐网络科技园 编辑:程序博客网 时间:2024/04/26 23:05

table1(col01 varchar2(11), col02 number)
table2(col01 varchar2(11), col02 number)

两张表的大概都有7,000,000行
现在要把符合条件的内容导入到一张新表,然后用exp导出
条件比较简单,但怎样才能快一点呢?
条件:
50<=table1.col02<=100
10<=table2.col02<=20
table01.col01必须在table02.col01中.

create table temptable
as
select a.col001 from table1 a
left outer join table2 b
on a.col001=b.col001
where a.col002>=50
and a.col002 <=100
and b.col002>=10
and b.col002 <=20
and b.col001 is not null;

我用的是左外联接。

分析如下:(此处没有必要外连接)

1. 使用create table as select ..
因为ddl语句对应的undo 比较少,,对应的就会少产生大量的redo..

2. 如果系统没有standby的限制,,可以考虑create table 的时候指定nologging 进一步降低redo 的生成量..

3. 调整select的sql效率.
  1). 这个地方不需要外连接,,直接使用=来进行外连接,, (建议不要使用ansi sql进行处理.
  2). 最好考虑使用提示,,让这条sql走hash_join, 对于大表连接,,hash join基本上都是最佳选择..
  3). 考虑提高表扫描的效率,,在session 中修改db_file_multiblock_read_count 到合适的值, 对于Aix/Linux系统单个IO的最大值都是1MB.
  4). 可以考虑修改系统参数,,适当提高hash_area_size ,对于9i的系统,,几乎可以不用考虑,,auto pga管理已经做的很好..

4. 就是看看效率如何了..

 

原创粉丝点击