mssql 批量更新数据效率

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

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

方法 3 假如 x 和 id 有关,那么使用 insert on duplicate 来更新,写个程序生成特定的 sql ;
wvtjplh
2018-10-28 09:10:19 +08:00
x 不是固定的,所以没法用 where id in (xxx, xxx....)
yc8332
2018-10-28 22:10:20 +08:00
就只有批量更新啊。。。不然就是多开进程啊。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501650

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX