【发布时间】: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