【问题标题】:Updating database with multiple records使用多条记录更新数据库
【发布时间】:2013-07-05 09:48:44
【问题描述】:

我们使用SQL Server 并拥有Winforms 应用程序。在我们的产品中,有时单笔交易记录超过 50000 条,我们会遇到性能问题。

当我们有大量数据时,我们通常会在多个数据库调用中这样做。因此,在我们的一个导入功能中,我们更新了 1000 行中的服务器。因此,如果我们有 5000 条记录,那么在处理它们时(在 for 循环中)我们更新前 1000 行,然后继续处理,直到我们得到新的 1000 行要更新。这表现更好,但老实说,就性能而言,这并不是我感觉最好的。

但是我们在其他导入/导出功能中看到,与 1000 行相比,每 5000 行更新数据库会产生良好的结果。因此,我们面临很多困惑,而且代码看起来也不相同应用程序。

谁能告诉我是什么导致了这种情况发生。您没有示例数据、数据库架构等,是的,我同意。但是在使用数据库时是否应该注意/考虑任何场景?为什么不同数量的记录会给我们带来好的结果,有什么我们忽略的吗?我不是数据库方面的冠军,更多的是.Net 中的编程人员。很高兴听到您的建议。

不确定这是否有帮助,我们的数据通常包含员工详细信息,例如工资单信息、个人详细信息、应计福利、薪酬等。数据来自 Excel,而且我们在内部流程中生成大量数据。如果您需要更多信息,请与我们联系。谢谢!!

【问题讨论】:

  • 您必须添加更多信息。您是执行 1000 次单次更新还是使用一条语句更新 1000 行?还是在临时表中插入 1000 行,然后更新另一个表?总体而言,为了提高性能,请避免查询中的子选择和多个 OR,改进键和索引,禁用触发器,或者尽可能进行批量插入

标签: sql sql-server database performance records


【解决方案1】:

您拥有的数据库标注越多,您需要的连接管理就越多(打开连接、使用连接、清理和关闭、我们是否使用连接池等)。您通过线路发送相同数量的数据,但您更频繁地打开和关闭水龙头,这会带来开销。

这样做的缺点是事务中保存的数据量更大。

但是,如果我可以提出建议,您可能需要考虑以不同的方式实现此目的,即尽快将所有数据加载到数据库中(加载到 约束 所在的临时表中去激活并关闭事务管理(如果可能),然后允许数据库执行检查和验证数据的任务。

由于您使用的是 SQL Server,您只需打开 SQL Profiler,定义适当的事件过滤器,然后观察在不同负载下会发生什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多