首页 > 解决方案 > 存储过程与简单 SQL 性能比较

问题描述

C# OR linq 查询中存储过程和简单 SQL 查询之间的性能比较。

CREATE PROCEDURE [dbo].[GetProductCM] 
AS 
BEGIN 
    SET NOCOUNT ON 

    SELECT 
        p.ProductId, 
        p.ProductName, 
        p.CategoryId
    FROM 
        dbo.Product p
END 
using (SqlConnection myConnection = new SqlConnection(con))
{
    string oString = "SELECT p.ProductId, p.ProductName,  p.CategoryI FROM dbo.Product p";

    SqlCommand oCmd = new SqlCommand(oString, myConnection);
    myConnection.Open();

    using (SqlDataReader oReader = oCmd.ExecuteReader())
    {
        while (oReader.Read())
        {    
            Product.ProductName= oReader["ProductName"].ToString();
            Product.CategoryI = oReader["CategoryI "].ToString();                       
        }

        myConnection.Close();
    }               
}
var queryAllProduct  = from p in Product 
                       select p;

最佳做法是什么?

标签: c#sqlsql-serverentity-framework

解决方案


不使用存储过程。

SQL Server 7 消除了预编译存储过程的性能优势(是的,即 7 到 25 年前,IIRC)。从那时起,计划被缓存并重用于动态 SQL。现在存储过程只有在

  • SQL非常大,结果非常慢(减少网络流量)并且网络很慢。
  • 您进行复杂的处理,否则需要残酷的数据传输。

事实上,在您的特定情况下,我会使用 ORM 和 LINQ,而不是浪费我的时间手动编写可以生成的 SQL 代码(很容易占程序代码的 40%)。


推荐阅读