2017-08-15 86 views
0

我有一個連接到SQL數據庫並檢索數據的Winforms應用程序,然後在執行操作之前,應用程序需要檢查數據是否存在於另一個SQL數據庫中。C#/ SQL效率查詢

我見過類似的查詢,但大多數都傾向於SQL,我想知道的是下面哪兩個選項在整體性能方面更好。我已經考慮兩種方法:在C#

1,創建兩個列表,填充它們,然後檢查是否從第一個列表中的值在接下來的列表中存在:

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

你真正的意思的數據是2級獨立的數據庫* *或2個獨立的*表*? – Neil

+0

在這種情況下,它是兩個單獨的數據庫。 – Daniel

+0

你有沒有在相關領域的指數?如果你這樣做,那麼SQL解決方案將更有效率。 –

回答

4

我建議在SQL服務器上運行整個查詢會更高效。從遠程數據庫檢索任意數據並在本地進行比較永遠不會比保存數據源的比較更快。

我的建議是編寫一個SPROC來做比較,並只返回兩個數據庫中存在的行。

可能使用類似:

SELECT 
    * 
FROM 
    [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE] 

或者在SQL Server中看看鏈接表

+0

這聽起來很合理,你將如何處理查詢SQL中的第二個數據庫?我不能假定數據庫在同一臺服務器上運行 - 沒有想到提及那個,對不起。 – Daniel

+0

看看鏈接的服務器 - 請參閱https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/linked-servers-database-engine – FJT

+0

This answer https://stackoverflow.com/questions/1144051/select-data-from-two-different-servers-in-sql-server給出了一些例子。 – Neil