【问题标题】:Sql server bulk insert/update vs MERGE in insert or update scenario插入或更新场景中的 Sql server 批量插入/更新与 MERGE
【发布时间】:2011-04-16 18:43:13
【问题描述】:

我需要找到使用 sql server 和 asp.net 在数据库中插入或更新数据的最佳方法。这是一个标准场景,如果数据存在则更新,如果不插入则更新。我知道这里有很多关于这个的话题,但没有人回答我需要知道的。

所以我的问题是,当您更新/插入 5k - 10k 行时确实没有问题,但 50k 或更多行会发生什么。

我的第一个想法是使用 sql server 2008 MERGE 命令,但如果它是 50k+ 行,我有一些性能考虑。另外我不知道我是否可以基于表中的其他唯一键而不是主 id 键(int)以这种方式对数据进行调整。 (准确来说是一个不会随时间变化的产品序列号)。

我的第二个想法是先获取所有产品序列,然后将新的数据序列与之比较,并将其分为插入数据和更新数据,然后进行一次批量插入和一次批量更新。

就是不知道哪个会更好,用MERGE不知道性能怎么样,只有sql server 2008支持,不过看起来很简单,第二个选项不需要sql 2008 年,批次应该很快,但首先选择所有序列并根据它们进行划分可能会有一些性能损失。

你有什么意见,选择什么?

【问题讨论】:

  • 您是决定升级到 2008 还是要分发可能需要在多个 SQL Server 版本上运行的应用程序?因为如果您已经拥有它,您应该能够测试 Merge 的性能。
  • 是的,我需要升级才能使用marge,这不是问题,但如果marge的性能更差,那我就是不知道是否值得。

标签: c# asp.net sql-server merge bulkinsert


【解决方案1】:

合并性能更好,因为“MERGE 语句最重要的优势之一是所有数据只读取和处理一次”

您不需要主键,您可以加入一个或多个字段,从而使您的记录独一无二

【讨论】:

  • 没有批量合并。批量插入和更新上下文中怎么可能是way better
  • 他正在插入/更新 50k 条记录,即批量 imo,将这些记录放在临时表中并与原始表合并
  • 在这种情况下加入唯一记录不好,必须通过这个唯一序列。数据将以基于文件/文本的格式来自其他公司,我需要先处理然后制作 marge 或我的第二个选项。所以产品系列是保证我的数据库和他们的数据之间的数据同步没有问题,我什至不需要知道或调整我的数据库架构。
【解决方案2】:

按照您的描述,对序列号执行合并应该没有问题。在使用MERGE 时,您可能需要阅读Optimizing MERGE Statement Performance 以了解Microsoft 推荐的最佳实践。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2011-09-11
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2012-06-16
    相关资源
    最近更新 更多