日期:2014-05-17  浏览次数:21293 次

关于ORACLE插入慢的问题
1.插入语句语句是
SQL code
insert into tb_a
select b.m,c.n
tb_b b
left join 
tb_c c
......
where
.....


这一类的语句,但是400多行的数据,需要插入很久,基本上是几分钟。
===========================================================
2.查询语句查询
SQL code
--insert into tb_a
select b.m,c.n
tb_b b
left join 
tb_c c
......
where
.....


基本上是一秒内就出来
===========================================================
3.执行建表语句
SQL code
--insert into tb_a
create table tb_a2 as
select b.m,c.n
tb_b b
left join 
tb_c c
......
where
.....


同样需要很久
===========================================================
tb_a为空表,无索引,无外键,无主键
请高手解答下

------解决方案--------------------
建议调整语法为:
inset into tb_a
select b.m,c.n
from tb_b b,tb_c
where b.id=c.id
查询时左连是不会影响速度,但是插入时就会明显的降低效率
------解决方案--------------------
与左连接没有关系

写数据慢,磁盘I0是不是有问题
------解决方案--------------------
有道理。
探讨

与左连接没有关系

写数据慢,磁盘I0是不是有问题

------解决方案--------------------

插入和查询的方式是不一样的
探讨
与左连接没有关系

写数据慢,磁盘I0是不是有问题

------解决方案--------------------
你最好把要插入的那些数据放到一个临时表里面。再插入。。看下速度。。
------解决方案--------------------
磁盘空间是不是满了,自动扩展很慢造成的。
------解决方案--------------------
是很奇怪,400条数据写入要几分钟,如果只是IO问题,那IO得多慢啊。
------解决方案--------------------
探讨
引用:

你最好把要插入的那些数据放到一个临时表里面。再插入。。看下速度。。

效果一样

------解决方案--------------------
确认一下你的table_a 是不是被别人锁定了
SQL code

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 解锁。

------解决方案--------------------
insert into/*APPEND*/ tb_a NOLOGGING
select b.m,c.n
tb_b b
left join 
tb_c c
......
where
.....
------解决方案--------------------
insert into/*APPEND*/ tb_a NOLOGGING
select b.m,c.n
tb_b b
left join 
tb_c c
......
where
.....
------解决方案--------------------
探讨

引用:

insert into/*APPEND*/ tb_a NOLOGGING
select b.m,c.n
tb_b b
left join
tb_c c
......
where
.....

还是木有效果。。。

------解决方案--------------------
都不看等待事件的吗?
------解决方案--------------------
楼上说的对,先看下等待时间吧!