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;
我用的是左外联接。
分析如下:(此处没有必要外连接)
因为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. 就是看看效率如何了..