使用大型数据集读取/写入 SQL Server 的最快方法?

mot*_*com 5 c# sql performance dataset

我的数据库中有大约 6000 万条记录,必须处理所有这些记录。因此,我们的想法是使用 C# 代码读取数据,对其进行处理,然后将其放回到数据库中。数据不会传入和传至同一个表 - 涉及多个表。

我想看看这样做最好的办法是什么?我是否应该在数据集中一次读取 100K 记录,然后处理每条记录,然后使用批量插入到数据库,然后读取下一组记录?

Con*_*rix 2

通常,绝对最快的方法是在服务器上以 SQL 批处理方式执行所有操作。

如果您坚持使用客户端,那么单独的线程进行读取和写入可能比使用一个线程同时执行这两项操作更快。读取和写入的线程数取决于硬件和您正在执行的操作

编辑:澄清方法。

检索数据并将其发送到 SQL Server 都是网络 IO 绑定并且是进程外的。这意味着在读取和发送数据时,您的应用程序都会花费时间等待数据通过网络从磁盘进入内存。假设检索数据需要 1 小时。处理 10 分钟,将数据发送回数据库需要 1 小时。所以你的整个过程需要2小时10分钟。

如果将其分成三个线程,1 个读取器、1 个处理器、1 个更新器。您可以将其缩短至接近 1 小时。如果你的应用程序编写得好,你可以添加额外的线程来读取、处理和写入,但你可能会对结果感到失望,因为共享缓存线、网卡如何响应大量并发请求等。

此外,当您使用 DataAdapter 填充数据集时,在填充完成之前您无法触摸任何数据。另一方面,如果您是 DataReader,则可以在第一行完成后开始使用数据。这意味着您不必担心一次限制为 100K。