繁体   English   中英

在性能方面比较Linq,SQL和存储过程

[英]Comparison of Linq to SQL and Stored procedures in terms of performance

我正在使用SQL Server 2005数据库,并且我的应用程序在ASP.NET MVC4中。 该应用程序的业务逻辑有点复杂,包含多个表联接和搜索条件。 在极端情况下,我需要联接大约10个表以获取单个网格所需的数据。 我想知道我应该使用SP还是Linq编写SQL应用程序代码以最大化我的应用程序性能。

SQL Server基本上按照以下步骤执行任何查询(存储过程调用或即席SQL语句):

  1. 语法检查查询
  2. 如果可以的话-检查计划缓存以查看是否已经有该查询的执行计划
  3. 如果有执行计划-该计划被(重新)使用并执行查询
  4. 如果尚无计划,则确定执行计划
  5. 该计划将存储到计划缓存中,以供以后重用
  6. 查询执行

关键是:即席SQL和存储过程没有区别

如果临时SQL查询正确地使用了参数 (无论如何,为了防止SQL注入攻击),它的性能特征没有什么不同,并且最肯定不会比执行存储过程

存储过程还有其他好处(例如,无需授予用户直接表访问权限),但是就性能而言,使用经过适当参数化的即席SQL查询与使用存储过程一样有效

更新:由于两个主要原因,对非参数化查询使用存储过程会更好:

  • 由于每个非参数化查询都是与SQL Server 不同查询,因此对于每个查询,它必须经历确定执行计划的所有步骤(因此,浪费了时间-并且还浪费了计划缓存空间,因为存储了执行计划进入计划缓存最终并没有真​​正帮助,因为该特定查询可能不会再次执行)

  • 非参数化查询存在SQL注入攻击的风险,应不惜一切代价避免使用非参数化查询

通常,您会发现存储过程的性能更快,因为存储过程将在可能的情况下重用执行计划。 Linq查询本质上成为针对数据库的即席查询,无需缓存就每次都作为新请求进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM