1.前提我的本地ic10表里有30万条数据
2.ic10@net里也有30万条数据
3.我想查询本地的ic10表的aac001和ic10@net的aac001相匹配完成更新ic10表
update ic10 a set (a.AAE116,a.AAE145,a.AAE006,AAE007,AAE004,AAE005)=(select b.AAE116,b.AAE145,b.AAE006,b.AAE007,b.AAE004,b.AAE005 from ic10@net b where b.aac001=a.aac001) where a.aac001 in (select c.aac001 from ic10 c);
谢谢各位高手了!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    把IN换杨exists的写法试试,一般来说in换成exists会快点,但不是绝对的
    update ic10 a 
         set (a.AAE116,a.AAE145,a.AAE006,AAE007,AAE004,AAE005)=
         (select b.AAE116,b.AAE145,b.AAE006,b.AAE007,b.AAE004,b.AAE005
              from ic10@net b 
           where b.aac001=a.aac001) 
         where exists  
            (select 1 
                  from ic10 c 
             where  a.aac001=c.aaac001); 
      

  2.   

    改成EXISTS未必會快多少啊?
    你用DATABASE LINK本來就很慢,你的條件是不是少了@netselect c.aac001 from ic10@net c
      

  3.   

    我的 select c.aac001 from ic10 c这条语句是查本地的数据和网上的数据匹配就不用加@net
      

  4.   

    除了楼上in改成EXISTS外,需注意将两个表的aac001设置为有效索引!