【发布时间】:2013-03-29 10:45:37
【问题描述】:
我有 SQL Server 存储过程来插入或更新一些数据(做一些逻辑)。我想从 .net 应用程序中多次调用它来插入/更新许多行。
当存储过程已经编译并且只需要参数时,将存储过程作为准备好的语句调用是否有意义?
【问题讨论】:
-
是的,当然。它也肯定是重复的
标签: sql-server stored-procedures prepared-statement
我有 SQL Server 存储过程来插入或更新一些数据(做一些逻辑)。我想从 .net 应用程序中多次调用它来插入/更新许多行。
当存储过程已经编译并且只需要参数时,将存储过程作为准备好的语句调用是否有意义?
【问题讨论】:
标签: sql-server stored-procedures prepared-statement
任何存储过程,如参数化查询,也必须在 SQL Server 执行之前解析一次。
在解析过程中,执行计划被确定并存储在 SQL Server 的计划缓存中,并且对该存储过程(或参数化查询)的任何后续调用都将重用该缓存的执行计划。该缓存的执行计划会一直保留在内存中,直到 SQL Server 重新启动,或者直到由于内存压力而必须清除缓存。
所以基本上 - 存储过程(或参数化查询)必须解析一次(以确定执行计划)这一事实无法解决 - 一旦完成,执行计划就是在内存中,可以重复使用。这也意味着:对存储过程的第一次调用(自上次 SQL Server 重新启动以来)总是会慢一些 - 毕竟,需要执行更多工作 - 任何后续调用都应该明显更快。
【讨论】: