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

时间:2014-11-04 04:45:00

标签: c# asp.net sql-server linq

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

2 个答案:

答案 0 :(得分:3)

SQL Server基本上执行这些步骤来执行任何查询(存储过程调用或临时SQL语句):

  1. 语法检查查询
  2. 如果没问题 - 它会检查计划缓存,看看它是否已经有该查询的执行计划
  3. 如果有执行计划 - 该计划被(重新)使用并且执行了查询
  4. 如果还没有计划,则确定执行计划
  5. 该计划存储在计划缓存中以供以后重用
  6. 执行查询
  7. 关键是:ad-hoc SQL和存储过程处理没有区别

    如果ad-hoc SQL查询正确地使用参数 - 无论如何都应该这样做,以防止SQL注入攻击 - 它的性能特征是没有区别,并且绝对是< 没有比执行存储过程更差

    存储过程具有其他好处(例如,无需授予用户直接表访问权限),但在性能方面,使用正确的参数化临时SQL查询与使用存储一样高效程序

    使用非参数化查询的存储过程

    更新更好,主要有两个原因:

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

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

答案 1 :(得分:0)

您通常会在存储过程中找到更快的性能,因为存储过程将尽可能重用执行计划。 Linq查询基本上成为针对数据库的即席查询,每次都不会将缓存作为新请求处理。