源表有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分多,请问有什么可以优化的地方。(可以改源表结构索引什么的,也可以写存储过程,只要够快。。)
源表结构为: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分多,请问有什么可以优化的地方。(可以改源表结构索引什么的,也可以写存储过程,只要够快。。)
select a.custom, a.code, floor(a.amount1 * 2154 + a.amount2 * 8789) as amount3
from 源表 a
求优化方法
LZ这种情况想更快的话,除了硬件上的增强...
就只能insert /*+append*/ into...时间减少一半,
不过不推荐使用,可能会对数据库完整性造成危害.
select a.custom, a.code, floor(a.amount1 * 2154 + a.amount2 * 8789) as amount3
from 源表 a 写在存储过程里试试
使用append会增加数据插入的速度。
/*+APPEND*/的作用是在表的高水位上分配空间,不再使用表的extent中的空余空间但是 APPEND 也有缺点APPEND 的时候会锁表
APPEND 添加数据的方式容易形成碎片