2012-02-21 86 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