有个insert into table select的SQL,select部分确实是慢了点儿,不过单独执行select部分4秒钟就能返回,但是如果执行insert into table select,是死活没有结果,其实select部分是没有返回数据的(也就是抽出结果为0条)。其他插入同一个table的SQL,如果select部分有结果的话,反而很快。谁能解释这种现象?

解决方案 »

  1.   

    开两个sql窗口,一个没commit吧?;
      

  2.   

    --楼主用下面的语句查询下,是不是有记录,如果有记录,就阻塞了,需要kill session 
    select b.sid,b.machine,c.object_name,a.oracle_username, 
    a.locked_mode,b.osuser,
    'alter system kill session '''||b.sid||','||b.serial#||''';'
    from v$locked_object a,v$session b,all_objects c
    where a.session_id=b.sid and a.object_id=c.object_id;
      

  3.   

    加上  for update no wait
    试试
      

  4.   

    谢谢大家的回复。表没锁,最后发现是执行计划的问题。
    单独运行select部分,和运行insert into table select,其中select部分的执行计划居然差别很大。
    后来把select里面exists部分,都改为inner join(被join字段做了group),居然速度很快,见鬼。