zoukankan      html  css  js  c++  java
  • oracle update 改为 merge

    有个同学问过不看plan能不能优化,有些语句确实不需要看plan,今天就有个很简单的案例

    比如下面这个:

    网友说更新时间太长,需要1个小时

    1. UPDATE ia
    2. SET ia.col_time =
    3. (SELECT MAX(substr(numtodsinterval(iaf.col_time, 'second'), 12, 8))
    4. FROM iaf
    5. WHERE ia.id = iaf.code
    6. GROUP BY ia.id)
    7. WHERE EXISTS (SELECT 1
    8. FROM iaf
    9. WHERE ia.id = iaf.code
    10. GROUP BY ia.id);
    UPDATE ia
       SET ia.col_time =
           (SELECT MAX(substr(numtodsinterval(iaf.col_time, 'second'), 12, 8))
              FROM iaf
             WHERE ia.id = iaf.code
             GROUP BY ia.id)
     WHERE EXISTS (SELECT 1
              FROM iaf
             WHERE ia.id = iaf.code
             GROUP BY ia.id);
    

    象这种关联更新一般都可以改为merge语句,改这种语句用不了几分钟

    1. MERGE INTO ia
    2. USING (SELECT iaf.code,
    3. MAX(substr(numtodsinterval(iaf.col_time, 'second'), 12, 8)) col_time
    4. FROM iaf
    5. WHERE ia.id = iaf.code) iaf
    6. USING (ia.id = iaf.code)
    7. WHEN MATCHED THEN
    8. UPDATE SET ia.col_time = iaf.col_time;
    MERGE INTO ia
    USING (SELECT iaf.code,
                  MAX(substr(numtodsinterval(iaf.col_time, 'second'), 12, 8)) col_time
             FROM iaf
            WHERE ia.id = iaf.code) iaf
    USING (ia.id = iaf.code)
    WHEN MATCHED THEN
      UPDATE SET ia.col_time = iaf.col_time;
    


    单单对比这两个语句的写法就可以看到:改为merge后对于iaf的访问减少了一次。

     

    http://blog.csdn.net/jgmydsai/article/details/37697749

  • 相关阅读:
    VBA trouble
    深入浅出Automation Anywhere
    sqlserver--install/uninstall
    linux遇到的问题
    Java并发编程:线程池的使用(转载)
    java——线程
    关于项目管理工具 maven
    从xml文件取值
    jquery
    小结-9.20
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480246.html
Copyright © 2011-2022 走看看