zoukankan      html  css  js  c++  java
  • 批量更新语句合并

    我的基本主张是:如果每次更新的是彼此无关的记录,对一张表连续进行多次update操作还可
    以接受;否则,就应该把它们合并成一个update操作。例如,下面是来自实际应用的一些代码

    update tbo_invoice_extractor
    set pga_status = 0
    where pga_status in (1,3)
    and inv_type = 0;
    update tbo_invoice_extractor
    set rd_status = 0
    where rd_status in (1,3)
    and inv_type = 0;

    两个连续的更新是对同一个表进行的。但它们是否将访问相同的记录呢?不得而知。问题是,
    搜索条件的效率有多高?任何名为type或status的字段,其值的分布通常是杂乱无章的,所以上
    面两个update语句极可能对同一个表连续进行两次完整扫描:一个update有效地利用了索引,而
    第二个update不可避免地进行全表扫描;或者,幸运
    的话,两次update都有效地利用了索引。无论如何,把这两个update合并到一起,几乎不会有损
    失,只会有好处:

    update tbo_invoice_extractor
    set pga_status = (case pga_status
    when 1 then 0
    when 3 then 0
    else pga_status

    end),
    rd_status = (case rd_status
    when 1 then 0
    when 3 then 0
    else rd_status
    end)
    where (pga_status in (1,3)
    or rd_status in (1, 3))
    and inv_type = 0;

  • 相关阅读:
    孙权劝学
    劝学
    为学
    字符串的全排列
    剑指offer面试题3二维数组中的查找
    如何正确安装软件
    写给自己的话
    Linux常用命令
    第三届华为杯
    D^3ctf两道 pwn
  • 原文地址:https://www.cnblogs.com/chenli0513/p/1828904.html
Copyright © 2011-2022 走看看