Omr*_*mri 9 c# sql optimization chunking
我正在使用.Net 4.0和SQL Server 2008 R2.
我正在运行一个大的SQL选择查询,它会返回数百万个结果,并且需要很长时间才能完全运行.
有谁知道如何只读取查询返回的一些结果而不必等待整个查询完成?
换句话说,我想在查询仍然运行并获得下一个结果时读取第一个10,000个记录块.
Mar*_*ell 12
这部分取决于查询本身是否是流式传输,或者它是否在临时表中进行了大量工作,然后(最终)开始返回数据.除了重写查询外,在第二种情况下你不能做太多事情; 但是,在第一种情况下,迭代器块通常会有所帮助,即
public IEnumerable<Foo> GetData() {
// not shown; building command etc
using(var reader = cmd.ExecuteReader()) {
while(reader.Read()) {
Foo foo = // not shown; materialize Foo from reader
yield return foo;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在这是一个流式迭代器 - 你可以foreach通过它,它将从传入的TDS数据中实时检索记录,而不首先缓冲所有数据.
如果您(可能明智地)不想编写自己的实现代码,那么有一些工具可以为您执行此操作 - 例如,LINQ-to-SQL ExecuteQuery<T>(tsql, args)将完成上述无痛操作.
| 归档时间: |
|
| 查看次数: |
20133 次 |
| 最近记录: |