SQL Server 大量Update和Insert操作如何提升性能?

发布于 2022-09-01 23:26:18 字数 483 浏览 12 评论 0

业务是这样的:

每个物品有唯一编号如0011,业务表中需要对物品的每个状态更新进行记录,业务表结构如下:id, item_id, pre_time, cur_time, value(除了id其他都是varchar(20),历史遗留问题)

每次进来一个作业(item_id, this_value, time_now),内存中维护每个item的last_value信息,如果该item的last_value == this_value则对业务表更新,将cur_time更新为time_now。如果该item的last_value != this_value则对业务表进行插入操作,新增一条记录(id++,item_id, pre_time=time_now, cur_time=time_now, value=this_value)

现在的问题是每秒钟需要进行的作业量很多(需要对业务表进行频繁的插入、更新操作),只有id的聚集索引,更新速度非常慢,大概每秒钟只能处理几十个作业,但是每秒钟有1000+的更新

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

茶色山野 2022-09-08 23:26:18
  1. 直接把逻辑写到SqlServer上面去.
    SqlServer是支持复杂语句的, 也就是item_id, this_value, time_now可以当作一个存储过程的参数. 里面写select if update insert之类的

  2. 在逻辑层解决这个问题
    服务启动的时候, 把所有的item_id => (pre_time, cur_time, value)全部load出来, 然后缓存起来. 处理新来的消息的时候, 就知道到底该更新, 还是插入, 最后只需要处理一条SQL语句. 一秒1000+的SQL还是很容易的吧, 用几个Connection就行了.

鲜血染红嫁衣 2022-09-08 23:26:18

批处理,不要每次一条数据就去访问数据库,每100条进行一次数据库访问操作

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文