このようなテーブル変数を作成すると、次のようになります。
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;
、ここでは誰もテーブル変数に関するコードを記述しておらず、これらのオブジェクトを早期にリリースできない公式の理由がわからない可能性があります。ただし、テーブルを削除しても、とにかくスペースを解放しているわけではありません。特定の方法でページにマークを付けているだけです。