建议调整语法为: inset into tb_a select b.m,c.n from tb_b b,tb_c where b.id=c.id 查询时左连是不会影响速度,但是插入时就会明显的降低效率
是很奇怪,400条数据写入要几分钟,如果只是IO问题,那IO得多慢啊。
可是 这个用别的机器DBLINK的话 只需要10秒 ======================================= 在02机器上运行 insert into tb_a select b.m,c.n tb_b@dblink01 b left join tb_c@dblink01 c ...... where .....
看下表tb_a所在的表空间是不是满了,自动扩展很慢造成的呢?
问题补充: 将查询出来的结果COPY出来放到另外一张TB_TEMP表 然后 insert into tb_a select * from TB_TEMP; commit; 时间不到1秒。
确认一下你的table_a 是不是被别人锁定了select * from v$session t1,v$locked_object t2,user_objects t3 where t1.sid=t2.session_id and t2.object_id = t3.object_id;--因为 当表A被人锁定后,别人是不能插入数据的,除非那人解锁 --你可以试试 --1、加锁 排他锁 和 共享锁 都可以 lock table table_a in Exclusive mode; --排他锁 lock table table_a in share mode; --共享锁--2、新打开一个窗口执行插入,这个窗口会挂住,除非你在第一个窗口 commit 和 rollback 解锁。
inset into tb_a
select b.m,c.n
from tb_b b,tb_c
where b.id=c.id
查询时左连是不会影响速度,但是插入时就会明显的降低效率
=======================================
在02机器上运行
insert into tb_a
select b.m,c.n
tb_b@dblink01 b
left join
tb_c@dblink01 c
......
where
.....
将查询出来的结果COPY出来放到另外一张TB_TEMP表
然后
insert into tb_a
select * from TB_TEMP;
commit;
时间不到1秒。
where t1.sid=t2.session_id
and t2.object_id = t3.object_id;--因为 当表A被人锁定后,别人是不能插入数据的,除非那人解锁
--你可以试试
--1、加锁 排他锁 和 共享锁 都可以
lock table table_a in Exclusive mode; --排他锁
lock table table_a in share mode; --共享锁--2、新打开一个窗口执行插入,这个窗口会挂住,除非你在第一个窗口 commit 和 rollback 解锁。
select b.m,c.n
tb_b b
left join
tb_c c
......
where
.....
select b.m,c.n
tb_b b
left join
tb_c c
......
where
.....
insert /*+APPEND*/ into tb_a
select b.m,c.n
tb_b b
left join
tb_c c
......
where
.....