2012-02-21 85 views
0

我在寫一個測試應用程序,它連接到一個SQL Server數據庫,裏面有兩個表。表1列出了具有非唯一鍵的數據,該鍵指向表2中的多行。目前我所做的是遍歷表1中的每條記錄,然後使用單獨的查詢從表2中獲取相關記錄。表2有超過2600萬條記錄,這個過程需要很長時間。表1中的數據可能只有幾百條記錄或者高達約100萬條記錄。ADO.NET SQL查詢加入?

有沒有加快數據訪問的方法?也許使用表連接來獲取一個查詢中的所有數據?還是其他什麼?

對不起,我不能發佈數據庫表或當前代碼,因爲我是NDA,因爲它是非常敏感的數據。無論如何,現在的代碼是無關緊要的,因爲我正在尋找一種全新的(更好的)方法。

請注意我在C#中使用.NET內的ADO。

編輯:我沒事做JOIN查詢,但更多問,如果這將是更有效的ADO?我知道它一般會更有效率,但不知道ADO是否可以處理這個問題。也正在尋找一些C#代碼來做到這一點。謝謝。

+0

這很簡單;您可以在兩個表之間使用內部聯接運算符。另一方面,更糟糕的情況是您嘗試將100 * 2600萬行加載到內存中。您希望查詢總共返回多少行(您實際從Table2獲得多少行?) – dash 2012-02-21 09:11:53

+0

表1中每個記錄的表2中可能會有大約8-10行。 – Jonnster 2012-02-21 09:32:26

回答

3

你可以得到的所有數據一次性使用JOIN這樣的:

SELECT t1.NonUniqueKey, t2.* 
FROM Table1 t1 
    JOIN Table2 t2 ON t1.NonUniqueKey = t2.NonUniqueKey 

你要考慮把索引上NonUniqueKey,但這應該不是執行N次查詢對你更好,表1中的每行一個

+0

謝謝,這太棒了。完全是我的錯,因爲沒有更好的解釋,但我對連接查詢沒問題,但更多地考慮如何以儘可能高效的方式在ADO.NET中使用它。用SqlDataReader執行這個查詢是最快的方法嗎? – Jonnster 2012-02-21 09:53:11

+0

SqlDataReader *可能會比使用SqlDataAdapter填充DataSet/DataTable更有效率,但有多大的區別 - 您需要測試tbh。在底層,SqlDataAdapter會使用SqlDataReader。在事物的宏偉計劃中,查詢本身和通過網絡傳輸的數據量可能是最大的缺點。 – AdaTheDev 2012-02-21 10:02:37