UPDATE aa a SET money =( SELECT 1 FROM user_files b WHERE a.userno = b.user_no)
UPDATE aa a SET money = 1 WHERE EXISTS( SELECT 1 FROM user_files b WHERE a.userno = b.user_no)谁帮我解释一下这两个sql的效率为何能相差 10倍啊 ,谢谢 ,aa 数据少 ,user_files数据量很大

解决方案 »

  1.   

    exists发现一个满足条件的即返回。
      

  2.   

    第一个是一个一个做循环的的判断a.userno,然后取值1再赋值
    第二个先判断存在直接赋值1
      

  3.   

    第一个更新aa表的所有记录.
    第二个更新符合关连条件的记录.
    如果aa记录很少,效率没有差别;
    如果aa记录很多,第一个就会很慢,并且会把没有关连的数据更新成null(估计你并不需要这样作);
      

  4.   

    哥哥 ,你还真说错了 ,aa表中只有9条数据 ,user_files 中有10万条 ,第二句 效率 是第一句的 10倍
      

  5.   

    那你比较一下这个的效率
    update aa a set money = 1
     where a.userno in ( select distinct b.user_no from user_fiels b)
      

  6.   

    知道就行了
    原因的话1楼解释清楚了。
    最好不要用 select 1 
    select (key) from ****会更快点
      

  7.   

    呵呵,想知道select 1 能选出什么?
      

  8.   

    第一个更新aa表的所有记录. 
    第二个更新符合关连条件的记录. 
    如果aa记录很少,效率没有差别; 
    如果aa记录很多,第一个就会很慢,并且会把没有关连的数据更新成null(估计你并不需要这样作);