【问题标题】:Makes sense to call stored procedure as prepared statement?将存储过程称为准备好的语句是否有意义?
【发布时间】:2013-03-29 10:45:37
【问题描述】:

我有 SQL Server 存储过程来插入或更新一些数据(做一些逻辑)。我想从 .net 应用程序中多次调用它来插入/更新许多行。

当存储过程已经编译并且只需要参数时,将存储过程作为准备好的语句调用是否有意义?

【问题讨论】:

  • 是的,当然。它也肯定是重复的

标签: sql-server stored-procedures prepared-statement


【解决方案1】:

任何存储过程,如参数化查询,也必须在 SQL Server 执行之前解析一次。

在解析过程中,执行计划被确定并存储在 SQL Server 的计划缓存中,并且对该存储过程(或参数化查询)的任何后续调用都将重用该缓存的执行计划。该缓存的执行计划会一直保留在内存中,直到 SQL Server 重新启动,或者直到由于内存压力而必须清除缓存。

所以基本上 - 存储过程(或参数化查询)必须解析一次(以确定执行计划)这一事实无法解决 - 一旦完成,执行计划就是在内存中,可以重复使用。这也意味着:对存储过程的第一次调用(自上次 SQL Server 重新启动以来)总是会慢一些 - 毕竟,需要执行更多工作 - 任何后续调用都应该明显更快。

【讨论】:

  • 那么,我应该使用准备好的语句吗?帮助它更有效地运行?
  • @Fanda: 是的,当然——prepared statement 基本上只是在初始解析阶段运行,之后,存储过程/参数化查询可用于后续执行来电。
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多