c# - 优化查询性能

标签 c# sql-server azure

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

表在 ScenarioID 上有非聚集索引

Sp只是一个带有where条件的select语句。 从 Cost 中选择 *,其中 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

最佳答案

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

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

关于c# - 优化查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632807/

相关文章:

azure - 通过ARM模板自动向cosmos DB添加数据

c# - ServiceStack.Text 和 DeserializeFromString 其中 Json 名称是非法的

c# - 如何在 WPF/C# 中创建可制表符的内容?

sql - 将数据从数据库插入到另一个数据库

mysql - 如何执行 MSSQL 查询而不出错?

azure - 有没有办法以编程方式将 YAML 文件存储在 Azure Key Vault 中?

azure - Web 应用程序 Azure 门户 - Key Vault 引用显示未连接

c# - 颜色转换 CMYK - RGB - Lab with WCS 使用 ICC 配置文件

c# - DataGridView 的列太多

sql-server - 如何使用 T-SQL 列出 SQL Server 中的所有表名称?