存储过程中的临时表将导致重新编译执行计划

M.A*_*Ali 7 sql-server stored-procedures sql-server-2008 sql-server-2008-r2

如果我Temp Tables在存储过程的定义中创建,然后dropping them when I am done使用它们将导致重新编译执行计划?

对于存储过程每次调用它?任何个人经历?有什么解释吗?

当在每次调用结束时删除临时表时,执行计划变为无效.SQL Server是否仍然保留执行计划并在下次调用时重用,或者在每次调用时重新编译它.

小智 6

删除临时表无关紧要.如果创建了一个表(永久或临时),则重新编译该语句之后的所有语句(即使它们不引用该表).不重新编译使用EXEC调用可执行对象.这是因为SQL Server可以在创建对象后创建计划.(在这种情况下,temp.表.)

您可以使用扩展事件及其sql_statement_recompile或SQL Trace/SQL Server Profiler SQL:StmtRecompile监视重新编译.

  1. 语句开始执行.SP:StmtStarting或SQL:引发StmtStarting
  2. 声明重新编译.SQL:引发StmtRecompile.SP:StmtStarting或SQL:再次引发StmtStarting
  3. 声明完成了.SP:StmtCompleted或SQL:引发StmtCompleted

不是整个过程被重新编译,而只是单独的声明.