如果我创建一个像这样的表变量:
Declare @MyTable Table(ID int,Name varchar(50))
在查询结束时对服务器运行删除查询是否更好?有点像关闭对象吗?
Delete From @MyTable
还是没必要?
答案 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;
- 但是没有人在这里围绕表变量编写代码,我们不太可能知道我们为什么会这样做的官方原因不能及早发布这些对象。但放弃桌面并不意味着你无论如何都要释放空间 - 你只是以某种方式标记页面。