我正在使用SqlCommand
来执行查询,但是该查询通常非常缓慢-大约需要50秒才能完成-是否可以逐一读取结果? >
using (SqlConnection connection = new SqlConnection(ExportMetrics.CreateConnectionString()))
{
SqlCommand command = new SqlCommand(sqlQuery, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
//Read results
}
catch (Exception e)
{
//Exception
}
finally
{
reader.Close();
}
}
}
答案 0 :(得分:2)
SqlDataReader已经做到了“一一读入”结果。
这是否有帮助取决于查询。具有GROUP BY +聚合函数或ORDER BY 1 子句的查询通常必须先在服务器内存中实现整个结果集,然后才能开始返回结果。其他语言构造也可能需要这样做。没有这些语言功能的查询 可能能够更快地开始返回结果,具体取决于执行计划。
但是,在SQL领域,50秒是很长的时间。几乎总是有一种方法可以重写查询或调整索引以使其运行得更快。当然,除非我们能够查看查询,表结构和索引作为问题的一部分列出,否则我们将无济于事。
1如果ORDER BY子句与相对于JOIN的主键或其他重要索引匹配,从而请求的顺序与查询工作集所使用的顺序匹配,并且可以用数学方式显示,则可能仍然可以。