优化查询性能

时间:2014-12-24 06:55:24

标签: c# sql-server azure

我的存储过程最少返回40K行,在SSMS 2008 R2中需要20秒,数据库驻留在Sql Azure中,但是当我使用EF 5或只是普通ADo在我的c#应用程序中运行相同的Sp时。 NET需要70-80秒。

表在ScenarioID上有一个非聚集索引

Sp只是一个带有where条件的select语句。 select * from Cost where ScenarioID= @ID

        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("sp_GetActCostsByID", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID;
                con.Open();
                DataTable dt = new DataTable();
                DateTime timee = DateTime.Now;
                Console.WriteLine(timee);
                dt.Load(cmd.ExecuteReader());
                timee = DateTime.Now;
                Console.WriteLine(timee);
            }
        }

有没有办法提高性能:

我的执行计划:

enter image description here

1 个答案:

答案 0 :(得分:1)

ScenarioID上的非聚集索引可能没有帮助,如果您没有INCLUDE您尝试返回的所有列,因为它需要执行查找获取其他列 - 如果该场景有很多行,则最终可能会进行普通的表扫描。这归结为统计数据,因此服务器与服务器之间会有所不同。

如果您可以避免查找,那么您将获得更一致的性能。