我有一个连接到SQL数据库并检索数据的Winforms应用程序,然后应用程序需要在执行操作之前检查数据是否存在于另一个SQL数据库中。
我见过类似的查询,但大多数都是针对SQL的,我想知道的是下面两个选项中哪一个在整体性能方面更好。我考虑了两种方法:
1.在C#中创建两个列表,填充它们,然后检查第一个列表中的值是否存在于下一个列表中:
List<T> firstList = new List<T>();
List<X> secondList = new List<X>();
firstList = firstList.populate(); // SQL Stored Procedure to populate list
secondList = secondList.populate(); // SQL Stored Procedure to populate list
foreach(var item in firstList)
{
if( (x => x.value == item.value) )
{
//do some action
}
}
2.在C#中创建一个列表,并执行一个执行存储过程的方法,以检查SQL数据库中是否存在作为参数传递的值。填充列表后,我将迭代它并执行返回布尔值的新方法:
List<T> firstList = new List<T>();
firstList = firstList.populate(); // SQL Stored Procedure to populate list
foreach(var item in firstList)
{
bool exists = false;
exists = firstList.checkValue(item.value); // SQL Stored Procedure to check if value exists
if(exists)
{
//do some action
}
}
我不确定执行许多SQL查询是否更好,减少内存使用量或执行更少的查询和使用内存。该应用程序将在一个应该具有32Gb RAM的小型应用程序服务器上运行。
如果我的任何一种方法效率不高,我也愿意使用其他技术。
答案 0 :(得分:4)
我建议在SQL服务器上运行整个查询会更有效。从远程数据库中检索任何数据并在本地进行比较绝不会比进行数据来源的比较更快。
我的建议是编写一个进行比较的SPROC,只返回两个数据库中存在的行。
可能使用类似的东西:
SELECT
*
FROM
[SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
或者查看Sql Server中的链接表