我有SQL Server存储过程来插入或更新一些数据(做一些逻辑)。我想多次从.net应用程序中调用它来插入/更新许多行。
将存储过程作为预处理语句调用,当存储过程已经编译并且只需要参数时,它是否有意义?
答案 0 :(得分:2)
任何存储过程(如参数化查询)也必须在SQL Server执行之前解析一次。
在解析过程中,确定执行计划并将其存储在SQL Server的计划缓存中,对该存储过程(或参数化查询)的任何后续调用都将重用该缓存的执行计划。缓存的执行计划将保留在内存中,直到SQL Server重新启动,或者直到由于内存压力而必须清除缓存。
基本上 - 没有办法解决存储过程(或参数化查询)必须解析一次(确定执行计划)的事实 - 一旦完成,执行计划就是在内存中,可以重复使用。这也意味着:对存储过程的第一次调用(自上次SQL Server重新启动以来)总是会慢一点 - 毕竟,需要执行更多工作 - 并且任何后续调用都应该明显更快。