很不正常:
在a,b上需要建index。INSERT /*+ APPEND */ INTO c
select * from A where exists (select * from b where a.a=b.a) COMMIT;      
 
这样没有用SGA里数据缓冲区和事物处理的回滚段, 也不写联机事物日志,
就象数据库装载工具SQLLOAD一样直接把数据写到物理文件,速度是很快的。

解决方案 »

  1.   

    我是想问问若没有索引的情况下这个时间是不是属于正常,因为这个操作花了20多分钟,我找公司的DBA,说是数据库设置或回滚段问题,他说数据库肯定没问题,所以来这儿请教高手了,另外若是数据库问题,请问可能是什么原因,怎么解决??!!!
      

  2.   

    如果没有index,这个速度倒是有可能。和回滚段也有关系。
    你可以分段提交,以缓解回滚压力。
    或者直接给这个事务指定一个大的rollback seg。不过,你对c不加索引倒是可以理解,可为什么对ab也不加index呢?
      

  3.   

    a表没有索引,200多万纪录做一次全表扫描,再加上插入c表的工作量,如果db_block_size比较小的话,完全可能花上20分钟,这一点都不奇怪。另外,我猜这样的操作也不是经常作的,你完全可以建立一个大的回滚段,然后指定当前对话使用该回滚段,用外以后把回滚段删除就不会影响别的操作。