-3

在应用程序中使用更多的存储过程会导致应用程序的性能低下吗?它会降低 Web 应用程序的速度吗?

我正在使用 SQL Server 2005 数据库

4

2 回答 2

2

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

  1. 从语法上检查查询
  2. 如果没问题 - 它检查计划缓存以查看它是否已经有该查询的执行计划
  3. 如果有执行计划 - 该计划被(重新)使用并执行查询
  4. 如果还没有计划,则确定执行计划
  5. 该计划存储到计划缓存中以供以后重用
  6. 查询被执行

关键是:ad-hoc SQL 和存储过程在处理上没有什么不同

如果一个 ad-hoc SQL 查询正确地使用了参数——无论如何,为了防止 SQL 注入攻击——它的性能特征没有什么不同,而且绝对不会比执行存储过程差。

存储过程还有其他好处(例如,无需授予用户直接表访问权限),但在性能方面,使用适当参数化的 ad-hoc SQL 查询与使用存储过程一样有效。

在非参数化查询上使用存储过程更好,主要有两个原因:

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

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

于 2013-10-21T11:43:21.433 回答
0

使用更多的存储过程”那么什么是必要的?那么是的,这将影响您的应用程序。

如果您要检索的所有所需数据都是通过存储过程,那么这在大多数情况下将是检索数据的最佳方式。

您也可以回答,是的,删除存储过程会加速您的应用程序,但我敢肯定不会工作或内容/功能少得多......

我会更多地关注您的数据库是如何设计的。

确保参照完整性(设置表之间的关系)。

使用主键和索引。

无论如何,对于数据检索部分,这些都会对加速您的应用程序产生真正的影响。

于 2013-10-21T11:55:15.887 回答