【问题标题】:ADO.NET SQL Query Join?ADO.NET SQL 查询加入?
【发布时间】:2012-02-21 09:07:38
【问题描述】:

我正在编写一个小测试应用程序,它连接到一个包含 2 个表的 SQL Server 数据库。表 1 是一个具有非唯一键的数据列表,它指向表 2 中的多行。目前我所做的是遍历表 1 中的每条记录,然后使用单独的查询从表 2 中获取相关记录。表 2 中有超过 2600 万条记录,这个过程需要很长时间。表 1 中的数据可能只有几百条记录,也可能多达 100 万条。

有没有办法加快这种数据访问?也许使用表连接在一个查询中获取所有数据?还是别的什么?

抱歉,我无法发布数据库表或当前代码,因为我处于保密协议之下,因为它是非常敏感的数据。无论如何,当前的代码在这里有点无关紧要,因为我正在寻找一种全新(更好)的方式来做到这一点。

请注意,我在 .NET 中使用 C# 中的 ADO。

编辑:我可以进行 JOIN 查询,但更多的是询问这是否会更有效地使用 ADO?我知道它通常会更有效,但不确定 ADO 是否可以处理这个问题。还在寻找一些示例 C# 代码来执行此操作。谢谢。

【问题讨论】:

  • 很简单;您可以在两个表之间使用内部连接运算符。另一方面,更糟糕的情况是您尝试将 100 * 2600 万行加载到内存中。您希望查询总共返回多少行(您实际上从 Table2 中获得了多少行?)
  • 表 2 中的每条记录可能会有大约 8-10 行。

标签: c# sql .net ado.net


【解决方案1】:

您可以通过这样的 JOIN 一次性获取所有数据:

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

您需要考虑在 NonUniqueKey 上放置一个索引,但这对您来说应该比执行 n 个查询(Table1 中的每行一个)更好

【讨论】:

  • 谢谢,太好了。完全是我的错,因为没有更好地解释,但我对连接查询没意见,但更多的是寻找如何从 ADO.NET 以尽可能有效的方式使用它。用 SqlDataReader 执行这个查询是最快的方法吗?
  • SqlDataReader 可能比使用 SqlDataAdapter 填充 DataSet/DataTable 更有效,尽管差别很大 - 你需要测试一下。在后台,SqlDataAdapter 将使用 SqlDataReader。总体而言,查询本身和通过网络传输的数据量可能是最大的瓶颈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多