我使用的是SQL Server 2005数据库,我的应用程序是在ASP.NET MVC4中。 应用程序的业务逻辑有点复杂,包含多个表连接和搜索条件。在极端条件下,我需要连接大约10个表来获取单个网格所需的数据。 我想知道是否应该使用SP或Linq到SQL应用程序代码来最大化我的应用程序性能。
答案 0 :(得分:3)
SQL Server基本上执行这些步骤来执行任何查询(存储过程调用或临时SQL语句):
关键是:ad-hoc SQL和存储过程处理没有区别。
如果ad-hoc SQL查询正确地使用参数 - 无论如何都应该这样做,以防止SQL注入攻击 - 它的性能特征是没有区别,并且绝对是< 没有比执行存储过程更差。
存储过程具有其他好处(例如,无需授予用户直接表访问权限),但在性能方面,使用正确的参数化临时SQL查询与使用存储一样高效程序
使用非参数化查询的存储过程更新更好,主要有两个原因:
由于每个非参数化查询都是对SQL Server的新的,不同的查询,因此必须针对每个查询执行确定执行计划的所有步骤(从而浪费时间) - 并且还浪费计划缓存空间,因为将执行计划存储到计划缓存中最终并没有真正帮助,因为该特定查询可能不再次执行)
非参数化查询存在SQL注入攻击的风险,应该不惜一切代价避免
答案 1 :(得分:0)
您通常会在存储过程中找到更快的性能,因为存储过程将尽可能重用执行计划。 Linq查询基本上成为针对数据库的即席查询,每次都不会将缓存作为新请求处理。