如何使用SqlCommand在查询中获得一些结果

时间:2018-11-20 17:21:10

标签: c# sqlconnection sqlcommand

我正在使用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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

SqlDataReader已经做到了“一一读入”结果。

这是否有帮助取决于查询。具有GROUP BY +聚合函数或ORDER BY 1 子句的查询通常必须先在服务器内存中实现整个结果集,然后才能开始返回结果。其他语言构造也可能需要这样做。没有这些语言功能的查询 可能能够更快地开始返回结果,具体取决于执行计划。

但是,在SQL领域,50秒是很长的时间。几乎总是有一种方法可以重写查询或调整索引以使其运行得更快。当然,除非我们能够查看查询,表结构和索引作为问题的一部分列出,否则我们将无济于事。


1如果ORDER BY子句与相对于JOIN的主键或其他重要索引匹配,从而请求的顺序与查询工作集所使用的顺序匹配,并且可以用数学方式显示,则可能仍然可以。