gpt4 book ai didi

c# - 我每天大约有 3000 万行要在 SQL Server 中插入更新,我有哪些选择?

转载 作者:行者123 更新时间:2023-11-30 14:13:25 25 4
gpt4 key购买 nike

我每天大约有 3000 万行要在 SQL Server 中插入更新,我有什么选择?

如果我使用 SqlBulkCopy,它是否处理不插入已存在的数据?

在我的场景中,我需要能够在不复制数据的情况下使用相同的数据一遍又一遍地运行它。

目前我有一个存储过程,其中包含一个更新语句和一个从 DataTable 读取数据的插入语句。

我应该寻找什么以获得更好的性能?

最佳答案

做这样的事情的通常方法是维护一个永久的工作表(或表),对它们没有约束。通常这些可能位于同一台服务器上的单独工作数据库中。

要加载数据,清空工作表,通过 BCP/批量复制将数据导入。加载数据后,您可以执行任何必要的清理和/或转换来准备新加载的数据。一旦完成,作为最后一步,您可以通过执行必要的更新/删除/插入操作来将数据迁移到真实表,以实现旧数据和新数据之间的增量,或者通过简单地截断真实表并重新加载它们。

另一种选择,如果您有类似于源源不断的数据流入的东西,可能是设置一个守护进程来监视数据的到达,然后进行插入。例如,如果您的数据是平面文件,通过 FTP 或类似方式放入目录,则守护程序可以监视目录的更改并在内容到达时执行必要的工作(如上所述)。

如果这是一个生产系统,需要考虑的一件事是,执行大量的插入/删除/更新语句很可能会在事务处理过程中导致阻塞。此外,巨大的交易失败和回滚也有其自身的缺点:

  • 回滚可能需要相当长的时间来处理。
  • 在回滚期间保持锁定,因此有更多机会在数据库中进行阻塞和其他争用。
  • 最糟糕的是,在所有这些发生之后,您没有取得任何前进的动力,可以这么说:大量的时间和精力,您又回到了起点。

因此,根据您的情况,您最好以较小的批处理执行插入/更新/删除操作,以确保取得进展。 24 小时内 3000 万行结果为 c。每秒 350 个。

关于c# - 我每天大约有 3000 万行要在 SQL Server 中插入更新,我有哪些选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14284741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com