2011-11-06 83 views
1

新手问题临时表和存储过程编译

,但我相信有很多的困惑仍然存在,因为这种行为SQL 2000和SQL 2005之间的SQL Server版本之间更改/晚。

SQL Server 2000 在存储过程定义中有一个临时表会强制它每次重新编译它。所以没有执行计划存储导致性能不佳。

SQL 2005及更高版本 即使您的proc定义中有临时表,每次执行时都不会重新编译。执行计划将被重新分配。

+0

你的问题到底是什么? [无论如何,你可能想阅读这个](http://dba.stackexchange.com/questions/7477/optimization-moving-variable-declaration-to-top-of-procedure/7478#7478) –

+0

简单地说,在存储过程中有临时表会迫使它在每次运行时重新编译? –

+0

我的不好我刚刚在我的SQL 2008 R2 Express上测试过这个 sP中的临时表不会重新编译,并且计划将被重新分配。 没有SQL 2000所以不能测试,但任何人仍然有SQL2000可以证实这一点 –

回答

2

对于SQL 2000,您完全正确。对于SQL 2005,使用临时表的语句将独立于存储过程进行编译并进行缓存,以便它们可以重复使用。

请参阅Temporary Tables, Table Variables and Recompiles关于SQL可编程性& API开发团队博客。滚动到以“当编译存储过程DemoProc1时插入和选择查询未编译”开头的部分。