一時テーブルは、レポートや ETL ジョブなどの複雑なバッチ プロセスに最も役立ちます。一般に、トランザクション アプリケーションでそれらを使用することはほとんどありません。
複数の大きなテーブルを含む結合で複雑なクエリを実行している場合 (おそらくレポートの場合)、クエリ オプティマイザーは実際には 1 回のヒットでこれを最適化できない可能性があるため、ここでは一時テーブルが優先されます。クエリは一連のクエリに分解されます。クエリオプティマイザーが計画を台無しにする機会を少なくする単純なもの。場合によっては、単一の SQL ステートメントではまったく実行できない操作があるため、ジョブを実行するには複数の処理手順が必要になります。ここでも、より複雑な操作について説明しています。
中間結果用の一時テーブルを作成してからテーブルにインデックスを付けることもできます。場合によっては、クラスター化インデックスを配置して、後続のクエリを最適化することもできます。これは、データベース スキーマにインデックスを追加することを許可されていないシステムでレポート クエリを最適化するための、手っ取り早い汚い方法でもあります。SELECT INTO は、このタイプの操作に役立ちます。これは、ログが最小限に抑えられ (したがって高速であり)、select と insert の列を揃える必要がないためです。
その他の理由には、CROSS APPLY および xpath クエリを使用して XML フィールドからデータを抽出することが含まれる場合があります。一般に、これを一時テーブルに抽出してから一時テーブルで作業する方がはるかに効率的です。また、クエリを再評価するのではなくクエリ結果を具体化するため、一部のタスクでは CTE よりもはるかに高速です。
注意すべき点の 1 つは、一時テーブルは、クエリ エンジンが中間の結合結果を格納するために使用する構造とまったく同じであるため、一時テーブルを使用してもパフォーマンスが低下することはないということです。また、一時テーブルでは、セット操作を使用したマルチフェーズ タスクが可能になり、T-SQL コードでカーソルがほとんど (完全ではありませんがほとんど) 不要になります。
「コードのにおい」は大げさですが、一時テーブルを含む多くの単純な操作を見たら、何が起こっているのか疑問に思うでしょう。