请问这两种写法,哪种的执行效率快一些?
1. IF (UPDATE (SELECT * FROM TABLENAME WHERE ...) SET COLUMN1 = XX)==0;2. IF (SELECT COUNT(*) FROM TABLENAME WHERE ...) != 0;
   UPDATE TABLENAME SET COLUMN1 = XX WHERE ...;其中第二条是我之前做的一个小系统的写法,用C#,主要是用于判断记录是否存在,存在则更新,否则插入新值。 因为做的时候用的数据量不大,才100来条,所以两种写法看不出区别来,而我觉得第二条这样的写法从逻辑上别人更好看懂,考虑到实际应用,所以还是想把性能稍稍改善一下为好。

解决方案 »

  1.   

    个人觉得第一种性能要好一些。
    因为update本身会默认执行一个select。
    类似于:UPDATE TABLENAME SET COLUMN1 = XX WHERE ...; 本身数据库就会去检索数据有侧更新,没有不更新。第二种方法,多了一个检索的过程,从逻辑上分析。但是我不明白的是为什么要先判断再更新了呢。 直接下面这么干不可以么
    UPDATE TABLENAME SET COLUMN1 = XX WHERE ...; 
    IF SQL%ROWCOUNT = 0 THEN --没有更新记录
     ... 
    ELSE --有更新记录
     ....
    END IF;
      

  2.   


    --也可以用异常处理来实现,操作放到begin end块
    begin
      update ...
    exception
      when others then
        insert into ...
    end;
      

  3.   

    性能好不好不是用肉眼就能看出来的,
    1. IF (UPDATE (SELECT * FROM TABLENAME WHERE ...) SET COLUMN1 = XX)==0;
    2. IF (SELECT COUNT(*) FROM TABLENAME WHERE ...) != 0;
      UPDATE TABLENAME SET COLUMN1 = XX WHERE ...;
    在执行计划中执行一下不就知道了。