删除表声明的变量更适合优化吗?

时间:2012-06-10 18:05:47

标签: sql sql-server sql-server-2008

如果我创建一个像这样的表变量:

Declare @MyTable Table(ID int,Name varchar(50))

在查询结束时对服务器运行删除查询是否更好?有点像关闭对象吗?

Delete From @MyTable

还是没必要?

2 个答案:

答案 0 :(得分:4)

使用Delete会更糟。

当SQL变量超出范围(which has minimal logging)时,不会让SQL Server隐式删除表变量,而是tempdb事务日志的每一行也add fully logged delete operations

答案 1 :(得分:3)

我看不出这对性能有多好 - 它最多也是一样的(因为当@table超出范围时会被删除),最坏的情况是更多昂贵,因为它实际上必须首先执行删除。你认为这样做有什么好处:

DELETE #temptable;
DROP TABLE #temptable;

而不仅仅是这个:

DROP TABLE #temptable;

我承认我没有在@table案例中对此进行测试,但这也是您可以测试和测试的内容。应该清楚的是,在上述情况下,首先运行DELETE将占用更多资源而不是没有打扰。

可能有一个原因导致无法DROP TABLE @MyTable;DEALLOCATE @MyTable; - 但是没有人在这里围绕表变量编写代码,我们不太可能知道我们为什么会这样做的官方原因不能及早发布这些对象。但放弃桌面并不意味着你无论如何都要释放空间 - 你只是以某种方式标记页面。