V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wvtjplh
V2EX  ›  数据库

mssql 批量更新数据效率

  •  
  •   wvtjplh · Oct 27, 2018 · 2239 views
    This topic created in 2742 days ago, the information mentioned may be changed or developed.
    每次更新有几千个
    update table set column=value+x where id=xxx
    除了用把所有的操作放到一个集合中用事物更新的方式外还有什么方法可以效率更高?
    5 replies    2018-10-28 22:10:20 +08:00
    lihongjie0209
        1
    lihongjie0209  
       Oct 27, 2018
    update table set column=value+x where id in (xxx, xxx....)
    试试这种
    niubee1
        2
    niubee1  
       Oct 27, 2018
    放到 batch 里执行, 但是并不是 batch 里数量越多越好, 数量和你当前系统的配置有关, 你实验一下就好了
    ppyybb
        3
    ppyybb  
       Oct 27, 2018 via iPhone
    这个 x 是固定的还是和 id 有关系?我假设是前者。
    方法 1 就是放到集合里面了,innodb 对判断在不在集合里面好像是二分,找数据的时候直接走的索引。

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

    方法 3 假如 x 和 id 有关,那么使用 insert on duplicate 来更新,写个程序生成特定的 sql ;
    wvtjplh
        4
    wvtjplh  
    OP
       Oct 28, 2018
    x 不是固定的,所以没法用 where id in (xxx, xxx....)
    yc8332
        5
    yc8332  
       Oct 28, 2018
    就只有批量更新啊。。。不然就是多开进程啊。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   965 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:11 · PVG 07:11 · LAX 16:11 · JFK 19:11
    ♥ Do have faith in what you're doing.