c# - 存储过程与简单 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;
最佳做法是什么?
解决方案
不使用存储过程。
SQL Server 7 消除了预编译存储过程的性能优势(是的,即 7 到 25 年前,IIRC)。从那时起,计划被缓存并重用于动态 SQL。现在存储过程只有在
- SQL非常大,结果非常慢(减少网络流量)并且网络很慢。
- 您进行复杂的处理,否则需要残酷的数据传输。
事实上,在您的特定情况下,我会使用 ORM 和 LINQ,而不是浪费我的时间手动编写可以生成的 SQL 代码(很容易占程序代码的 40%)。
推荐阅读
- android - Proguard 和 com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian
- javascript - 我想无限重复功能,但我做不到
- javascript - 在寻找之前获取 HTML5 视频的当前时间
- amazon-web-services - Terraform - .tfstate 文件中的唯一 ID 是否总是从未使用过?
- ssl - 如何让我的 HTTP 网站变成 HTTPS?
- angular - 如何从订阅者内部的外部价值中获取
- c# - Xamarin.Forms Shell 选项卡仅显示列表中的最后一个选项卡
- javascript - parseInt() - 字符串到整数并返回 PHP
- ios - 表视图单元格内的集合视图未被调用
- angular - ngx-datatable 使用 multiClick 模式获取最新点击的原始数据