1

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

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

在服务器上在查询结束时对变量运行删除查询更好吗?有点像关闭一个对象?

Delete From @MyTable

还是没有必要?

4

2 回答 2

4

使用Delete会更糟。

除了让 SQL Server 在超出范围时隐式删除​​表变量(它具有最少的日志记录),您还将为每一行添加完全记录的删除操作tempdb事务日志中。

于 2012-06-10T19:10:22.503 回答
3

我看不出这对性能有什么好处 - 充其量是相同的(因为@table无论如何都会在超出范围时被删除),最坏的情况是会昂贵,因为它实际上必须先执行删除. 你认为这样做有什么好处吗:

DELETE #temptable;
DROP TABLE #temptable;

而不仅仅是这个:

DROP TABLE #temptable;

我承认我没有在这个@table案例中测试过这个,但你也可以测试和基准测试。应该清楚的是,在上述情况下,运行第DELETE一个将占用更多的资源而不是不打扰。

可能有一个原因没有办法DROP TABLE @MyTable;DEALLOCATE @MyTable;- 但这里没有人围绕表变量编写代码,我们不太可能知道我们不能及早释放这些对象的官方原因。但是删除表格并不意味着您正在释放空间 - 您只是以某种方式标记页面。

于 2012-06-10T18:33:16.510 回答