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 に答える