C# 涉及带有联接的查询的SqlDataReader

C# 涉及带有联接的查询的SqlDataReader,c#,sql,sql-server,performance,ado.net,C#,Sql,Sql Server,Performance,Ado.net,我有两个由外键(ID)链接的表。表1中有100万条记录。表2中有5000万条记录 我想从表1中读取记录并读取表2的所有相关记录。我可以使用SqlDataReader并实现peek()来实现这里讨论的功能() 但peek方法的缺点是,在前进父结果的指针之前,我必须将每个子记录与父记录进行比较 如果我在SQL Server中使用join,它将执行join操作,然后开始流式处理结果,这需要大量内存 另一种方法是将联接操作分批进行,但这涉及到触发多个SQL查询,我不想这样做 您能推荐一些替代方法来实现这

我有两个由外键(ID)链接的表。表1中有100万条记录。表2中有5000万条记录

我想从表1中读取记录并读取表2的所有相关记录。我可以使用
SqlDataReader
并实现
peek()
来实现这里讨论的功能()

但peek方法的缺点是,在前进父结果的指针之前,我必须将每个子记录与父记录进行比较

如果我在SQL Server中使用join,它将执行join操作,然后开始流式处理结果,这需要大量内存

另一种方法是将联接操作分批进行,但这涉及到触发多个SQL查询,我不想这样做


您能推荐一些替代方法来实现这一点吗?

如果我正确理解您的问题,您可能希望研究使用分区表,并且

您可以在页面中工作,即让服务器执行联接并仅请求Table1 ID为0到999的行。然后对下一个范围重复请求。这类似于批处理解决方案,这不是我想要的。它将导致触发多个查询。为什么您认为join方法将需要大量内存?SqlDataReader将在结果流式传输和使用时填充一些缓冲区,但不会消耗大量内存。只有将整个SqlDataReader结果读入DataTable或类似对象时,才会使用大量内存。您正在实现合并联接。SQL Server在恒定内存中处理该问题,就像您的应用程序一样。我不确定这是否有帮助,因为我没有任何where条件。。如果没有where条件,它将加载所有分区以应用连接条件。。
select ID, Col1 from Table1 order by ID

select ID, col2 from Table2 order by ID