第一种情况无论在什么时候效率都是可以接受的,但是表A的数据量远大于表B的它不是最快的。假设B表只有几行,它就没有IN快了.--如果2表数据量相差不大,那么连接的次序是不是对速度影响不大了?--你要更新A表,连接次序已经定了,只能拿A去联B吧?
只要在ID有索引,我觉得优化器都会解释成为一个表A的全表扫描,和对表B的一个索引定位
这种情况效率还是不错的

解决方案 »

  1.   

    多谢maohaisheng() 的回复;这样写估计确实应已达到最优了;不过,要更新的表和关联的表数据量确实太大,应该属于百万级以上甚至千万级的,这样执行更新的时候就相当的难以忍受了;所以,阿设想假如2表的数据量有差别的话,那么关联的先后次序对执行的速度应该会有影响的吧?但是,阿又不知道关联的次序对执行效率是怎么影响的?望高手点拨一二!
      

  2.   

    以上面来看,如果数据量太大(百万以上),可以用两表做差会更快。
    例:select * from ((select * from txdam) minus (select * from aktxdam));
    看返回结果集!
      

  3.   

    TO anke(killer) : 你的意思,阿明白;要是按你的说法的话,阿那句话就应该改成如下了:
    UPDATE TAB_1 SET CODE = '01' 
    WHERE ID IN ( SELECT ID FROM TAB_1 INTERSECT SELECT ID FROM TAB_2 )不过,要是这样写的话,百万级的数据更新估计要等到花儿也谢了吧?应该说,这样的写法执行效率应该是最高的了:
    UPDATE TAB_1 A SET A.CODE = '01' 
    WHERE EXISTS
    (SELECT 1 FROM TAB_2 B 
        WHERE B.ID = A.ID)现在阿困惑的是在2表数据量的大小不同的情况下进行关联的时候,关联字段连接的先后次序对更新速度是否会有一定的影响??
      

  4.   

    UPDATE TAB_1 A SET A.CODE = '01' 
    WHERE EXISTS(SELECT 1 FROM TAB_2 B WHERE B.ID = A.ID)

    UPDATE TAB_1 A SET A.CODE = '01' 
    WHERE EXISTS(SELECT 1 FROM TAB_2 B WHERE A.ID = B.ID)
    对于oracle来说是一样的,oracle内部会做优化的.
    你的SQL语句已经没有办法再优化了.考虑其他方法加速更新吧
      

  5.   

    gzing
    by the waySELECT department_id, job_id, manager_id,
    SUM(salary)
    FROM employees
    GROUP BY ROLLUP( department_id,(job_id, manager_id));这话什么意思啊?