本人在oracle 数据库上select * from 8888 a,9999 b where 条件11,条件22 等等用了90秒,但是我在建立了一个空表ddd ,然后插入数据.
insert into ddd 
select * from 8888 a,9999 b where 条件11,条件22 确半天不出来。涉及的数据有11万。关联的表当然也不止以上两个,只是做个案例,查询起来需要的时间并不多,但是同样的脚本,当进行插入数据的时候,却迟迟不出结果(1个小时没有动静),我尝试了create table ggg as select * from 8888 a,9999 b where 条件11,条件22 ;
这个耗时也不多,也为90秒。请各位高手指点一下,为什么同样的脚本,当查询和建表的时候,耗时很小。但是insert的时候,耗时那么久。如何解决这个问题。谢谢!!!!
 

解决方案 »

  1.   

    不要用 insert into用语句  create table ddd 
           as
           select * from 8888 a,9999 b where 条件11,条件22 
    最好呢  用字段名 代替 *
      

  2.   

    insert 是一条一条 写入
    create table as  是批量写入 
      

  3.   

    如果一定要先创建表在插入数据
    你看下 你的undo表空间 和 temp 表空间  足够大吗?
    可以试着  用insert into selelect 1000 次 commit 一次或者用 sqlloader 批量导入
      

  4.   

    undo表空间 和 temp 表空间 都是足够大的。确实,数据量大的时候,插入确实慢,sqlloader 可以批量导入,但是这个方法
    在unix下操作,还要写控制文件。
    我是用于存储过程,定时任务。原来不选择drop表和建表这个方式,担心数据碎片太多,影响性能,所以才选择insert ,
    truncate的模式。本人学习不久,很多东西不是很清楚。不过还是谢谢各位的点拨。