源表有500万左右的数据。
源表结构为:id, custom(char(4)), code(char(10)), amount1(number(10)), amount2(number(10)),
id,custom,code都已建立索引目标表结构为:custom(char(4)), code(char(10)), amount3(number(10)),
没有建立索引要求将源表里的数据经过计算,存入目标表中目前的SQL语句为:
insert into 目标 (custom, code, amount3)  
select a.custom, a.code, floor(a.amount1 * 2154 + a.amount2 * 8789) as amount3
from 源表 a现在通过PL/SQL Developer执行上面的语句,用时67S,但是通过Pro*C代码在程序中执行,用了3分多,请问有什么可以优化的地方。(可以改源表结构索引什么的,也可以写存储过程,只要够快。。)

解决方案 »

  1.   

    insert /*+ append nologging*/ into 目标 (custom, code, amount3)  
    select a.custom, a.code, floor(a.amount1 * 2154 + a.amount2 * 8789) as amount3 
    from 源表 a 
      

  2.   

    不好意思。 通过PL/SQL Developer执行也挺慢的。
    求优化方法
      

  3.   

    没有条件,索引无用...反正是走全表扫描.
    LZ这种情况想更快的话,除了硬件上的增强...
    就只能insert /*+append*/ into...时间减少一半,
    不过不推荐使用,可能会对数据库完整性造成危害.
      

  4.   

    insert /*+append*/ into 目标 (custom, code, amount3)  
    select a.custom, a.code, floor(a.amount1 * 2154 + a.amount2 * 8789) as amount3 
    from 源表 a 写在存储过程里试试
      

  5.   

    这就要你看一下 APPEND 添加数据的特点了在使用了append选项以后,insert数据会直接加到表的最后面,而不会在表的空闲块中插入数据。
    使用append会增加数据插入的速度。
    /*+APPEND*/的作用是在表的高水位上分配空间,不再使用表的extent中的空余空间但是 APPEND 也有缺点APPEND 的时候会锁表
    APPEND 添加数据的方式容易形成碎片
      

  6.   

    http://space.itpub.net/47598/viewspace-196022你看下吧