0

spの物理テーブルから一時テーブル構造を作成したい。

私には2つのアプローチがあります

Select * into #temptable from MainTable where NULL=NULL

また

Select * into #temptable from MainTable where 1=0

一時テーブル構造を作成する sp には多くのステートメントがあるため、一時テーブルの作成にはより良いアプローチを選択する必要があります。

パフォーマンスの高い一時テーブルを作成するより良い方法を教えてください。

4

2 に答える 2

3

また、あなたは使用することができますTOP(0)

SELECT  TOP(0) *
INTO    #TempTable
FROM    SourceTable

ただし、これら3つのケース(、、)のすべてSELECT TOP(0)WHERE NULL=NULLWHERE 1=0実行プランは同じになります。 ここに画像の説明を入力してください

これらすべての場合において、SQL Serverは、クエリ最適化フェーズから、これらのクエリが実行時に行を生成しないことを認識します。したがって、ソーステーブル(Sales.SalesOrderHeaderこの場合)からデータを読み取る代わりに、サーバーはConstant Scan演算子を使用します:

1)

[...]クエリオプティマイザーは、データのページに触れる前であっても、述語を満たすことができるレコードがないことを認識している可能性があります (ソース)

2)

矛盾の検出は、クエリが行をまったく返さないように記述されていることを認識する最適化です。 (ソース)

結論:これらのソリューションのいずれかを使用できます。

:使用できるのは。WHERE NULL=NULLの場合のみですSET ANSI_NULLS ONANSI_NULLS設定がの場合OFFWHERE NULL=NULLフィルターは常にtrueであり、実行プランは次のようになります。 ここに画像の説明を入力してください

于 2012-05-13T11:41:46.273 に答える
1

Select * into #temptable from MainTable where 1=0正しい方法です。同じ結果が得られますが、ベストプラクティスは、演算子Select * into #temptable from MainTable where NULL=NULLでNULL比較を行う必要があることです。ISまた1=0、比較は開発者間で共通です。

于 2012-05-13T06:10:10.180 に答える