C# 性能:大量查询还是大量处理?

C# 性能:大量查询还是大量处理?,c#,mysql,sql,sql-server,database,C#,Mysql,Sql,Sql Server,Database,目前,我正在创建一个C应用程序,它必须从现有数据库中读取超过2000000条记录的大量数据,并将其与数据库中不存在的大约2000000条记录的大量其他数据进行比较。这些比较主要是字符串比较。数据量将大大增加,因此我需要知道哪种解决方案将产生最佳性能 我已经在互联网上搜索过了,我想出了两个解决方案 解决方案1 例如,应用程序将执行一个查询,从表名称中选择列名称,并将所有数据存储在DataTable中。然后,应用程序将所有存储的数据与输入进行比较,如果存在比较,则将其写入数据库 优点: 查询将只执行

目前,我正在创建一个C应用程序,它必须从现有数据库中读取超过2000000条记录的大量数据,并将其与数据库中不存在的大约2000000条记录的大量其他数据进行比较。这些比较主要是字符串比较。数据量将大大增加,因此我需要知道哪种解决方案将产生最佳性能

我已经在互联网上搜索过了,我想出了两个解决方案

解决方案1

例如,应用程序将执行一个查询,从表名称中选择列名称,并将所有数据存储在DataTable中。然后,应用程序将所有存储的数据与输入进行比较,如果存在比较,则将其写入数据库

优点:

查询将只执行一次。之后,我可以对所有传入的记录多次使用存储的数据。 缺点:

随着数据库越来越大,我的RAM使用率也会越来越高。目前我必须使用1GB,我知道,这是一种艰苦的生活,如果我真的要下载数据库的全部内容,恐怕它就不适合了

处理所有数据将花费很多很多时间

解决方案2

例如,应用程序将对每个记录执行特定的查询

SELECT column_name FROM table_name WHERE value_name = value
然后检查数据表是否有记录,比如

 if(datatable.Rows.Count>0) { \\etc }
如果它有记录,我可以断定有匹配的记录,我可以写入数据库

优点:

由于我只获取特定的数据,所以RAM的使用可能会少很多。 处理速度要快得多。 缺点:

我将不得不执行许多查询。如果您对数字感兴趣,那么每个记录大概有5个查询。拥有2000000条记录,这将是10000000条查询。 我的问题是,考虑到我的内存有限,什么是最明智的选择


当然,也欢迎您提出任何其他建议。

如果您有可用的SQL Server,这似乎是一项直接适合SQL Server集成服务的工作。您可能会考虑使用该工具而不是构建自己的工具。这取决于您的确切业务需求,但一般来说,像这样的数据合并是批处理/无人参与还是基于工具的操作


您可能可以将其编码为比SSIS运行得更快,但我会尝试一下,看看您是否接受它,并为自己节省定制开发的成本。

Smartest option==购买更多RAM。这比开发人员的时间要便宜得多。真的。我建议使用解决方案2,您可以找到一种自动化查询的方法。您可以使用XML序列化其他数据,并将其传递给存储过程,存储过程将其与您的数据进行比较。它比经常打开连接更好,但买RAM更好。@DionV。你应该两者兼得,但最重要的是,投资总是值得的。如果你有一台速度较慢的服务器,你可以用100美元的硬件来修复它,或者用一周的时间让一个开发者每小时花费相同的成本来修复它——选择第一个。然后尝试在开发人员处理应用程序这一部分的时间内安排开发人员的时间。如果可能,将第二组数据加载到第二个表中,让sql进行比较,将输出直接捕获到数据库中。优点:SQL中包含的所有处理,包括结果数据的写入。数据库负责内存使用缺点:数据导入可能很慢,需要更大的存储容量。这看起来很有希望,我明天会研究它!