[英]C# / SQL Efficiency Query
我有一个Winforms应用程序,该应用程序连接到SQL数据库并检索数据,然后该应用程序需要在执行操作之前检查数据是否存在于另一个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的小型应用程序服务器上运行。
如果我的两种方法都不有效,我也愿意使用另一种技术。
我建议在SQL Server上运行整个查询会更有效。 从远程数据库检索任何数据并在本地进行比较永远不会比在保存数据源的地方进行比较更快。
我的建议是编写一个进行比较并仅返回两个数据库中都存在的行的SPROC。
可能使用类似:
SELECT
*
FROM
[SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
或看看Sql Server中的链接表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.