如果我在存储过程的定义中创建临时表,然后在完成它们时删除它们会导致重新编译执行计划吗?
对于存储过程每次调用它?任何个人经历?
有什么解释吗?
当在每次调用结束时删除临时表时,执行计划变为无效. sql Server是否仍然保留执行计划并在下次调用时重用,或者在每次调用时重新编译它.
解决方法
删除临时表无关紧要.
如果创建了一个表(永久或临时),则重新编译该语句之后的所有语句(即使它们不引用该表).不重新编译使用EXEC调用可执行对象.这是因为sql Server可以在创建对象后创建计划. (在这种情况下,temp.表.)
如果创建了一个表(永久或临时),则重新编译该语句之后的所有语句(即使它们不引用该表).不重新编译使用EXEC调用可执行对象.这是因为sql Server可以在创建对象后创建计划. (在这种情况下,temp.表.)
您可以使用扩展事件及其sql_statement_recompile或sql Trace / sql Server Profiler sql:StmtRecompile监视重新编译.
>语句开始执行. SP:StmtStarting或sql:引发StmtStarting
>该声明被重新编译. sql:引发StmtRecompile. SP:StmtStarting或sql:再次引发StmtStarting
>声明结束了. SP:StmtCompleted或sql:引发StmtCompleted
不是整个过程被重新编译,而只是单独的声明.