如果我创建这样的表变量:
Declare @MyTable Table(ID int,Name varchar(50))
在服务器上在查询结束时对变量运行删除查询更好吗?有点像关闭一个对象?
Delete From @MyTable
还是没有必要?
如果我创建这样的表变量:
Declare @MyTable Table(ID int,Name varchar(50))
在服务器上在查询结束时对变量运行删除查询更好吗?有点像关闭一个对象?
Delete From @MyTable
还是没有必要?
使用Delete
会更糟。
除了让 SQL Server 在超出范围时隐式删除表变量(它具有最少的日志记录),您还将为每一行添加完全记录的删除操作到tempdb
事务日志中。
我看不出这对性能有什么好处 - 充其量是相同的(因为@table
无论如何都会在超出范围时被删除),最坏的情况是会更昂贵,因为它实际上必须先执行删除. 你认为这样做有什么好处吗:
DELETE #temptable;
DROP TABLE #temptable;
而不仅仅是这个:
DROP TABLE #temptable;
我承认我没有在这个@table
案例中测试过这个,但你也可以测试和基准测试。应该清楚的是,在上述情况下,运行第DELETE
一个将占用更多的资源而不是不打扰。
可能有一个原因没有办法DROP TABLE @MyTable;
或DEALLOCATE @MyTable;
- 但这里没有人围绕表变量编写代码,我们不太可能知道我们不能及早释放这些对象的官方原因。但是删除表格并不意味着您正在释放空间 - 您只是以某种方式标记页面。