V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wvtjplh
V2EX  ›  数据库

mssql 批量更新数据效率

  •  
  •   wvtjplh · 2018-10-27 13:37:41 +08:00 · 1600 次点击
    这是一个创建于 2205 天前的主题,其中的信息可能已经有所发展或是发生改变。
    每次更新有几千个
    update table set column=value+x where id=xxx
    除了用把所有的操作放到一个集合中用事物更新的方式外还有什么方法可以效率更高?
    5 条回复    2018-10-28 22:10:20 +08:00
    lihongjie0209
        1
    lihongjie0209  
       2018-10-27 14:23:08 +08:00
    update table set column=value+x where id in (xxx, xxx....)
    试试这种
    niubee1
        2
    niubee1  
       2018-10-27 14:33:09 +08:00
    放到 batch 里执行, 但是并不是 batch 里数量越多越好, 数量和你当前系统的配置有关, 你实验一下就好了
    ppyybb
        3
    ppyybb  
       2018-10-27 15:10:56 +08:00 via iPhone
    这个 x 是固定的还是和 id 有关系?我假设是前者。
    方法 1 就是放到集合里面了,innodb 对判断在不在集合里面好像是二分,找数据的时候直接走的索引。

    方法 2 可以在上面的基础上开多线程同时更新,但是注意对 id 做切分,使得各个线程的 id 的区间没有重合,防止因为 next-key 锁住(如果 id 本身就是唯一索引就不用了)

    方法 3 假如 x 和 id 有关,那么使用 insert on duplicate 来更新,写个程序生成特定的 sql ;
    wvtjplh
        4
    wvtjplh  
    OP
       2018-10-28 09:10:19 +08:00
    x 不是固定的,所以没法用 where id in (xxx, xxx....)
    yc8332
        5
    yc8332  
       2018-10-28 22:10:20 +08:00
    就只有批量更新啊。。。不然就是多开进程啊。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:36 · PVG 07:36 · LAX 15:36 · JFK 18:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.