|
|
1
2
建议通过SQL Server来实现这一点是很好的,如果可以的话,这可能是最快的。文章位于 https://www.mssqltips.com/sqlservertip/2779/ways-to-compare-and-find-differences-for-sql-server-tables-and-data/ 给出了一些建议,尽管我不知道其中是否有进行了逐个领域的比较。这个 tablediff 他们引用的命令看起来特别有趣。 至少,你应该尝试一次或多次,只是想知道你能以多快的速度完成。 您可以使用 SqlDataReader ,它提供对结果的优化的只读转发访问。基本思想是:
该代码没有经过优化,也没有做任何错误处理,事实上也不会编译,因为我没有编写字段比较代码。但它应该让你知道需要发生什么。老实说,我不知道它是否会比你已经拥有的更快,但可能值得一试。你可以在里面放一个计数器,每隔1000行输出一次,这样你就知道它有多快了。
然而,您最大的问题是数据库必须排序以满足
还要注意,如果您真的要为每个表传输60GB的数据,那么在1GB网络上传输数据的时间将是 充其量是 每张桌子10分钟。很可能比这个时间更长,尤其是当您的网络上发生其他事情时。 如果可以的话,在服务器上运行它会更好。 |
|
|
2
0
现在您需要加载内存中的所有数据,并将每一行与每一行进行比较,这是低效的。 尝试使用SQL加入。由于数据库应该针对连接进行优化,所以它会更快(如果有一些索引可以帮助连接)。 如果由于某种原因无法做到这一点,那么另一种方法是使用哈希来加快速度。逻辑很简单:读取表1,计算每一行的哈希值(内置哈希函数应该可以很好地工作),将它们存储在一个集合中(或将它们放入数组并排序),然后对表2执行相同的操作并比较输出。 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 11 月前 |
|
|
Pavel Foltyn · 如何在C中生成逆字典# 1 年前 |
|
ewok · 基于种子和上一个值创建值列表 1 年前 |
|
|
Vasu V · 将foreach转换为select语句 1 年前 |
|
Modest · 使用命名空间和文本值序列化xElement 1 年前 |