12


3

SQL Server実行計画でテーブルスプールを削除する

いくつかの一時テーブルを作成し、それらにデータを挿入するクエリがあります。 私が理解していることから、これはテーブルスプールの潜在的な原因です。 実行計画を見ると、処理の大部分がテーブルスプールに費やされています。 これらのタイプのパフォーマンスの問題を改善するための良いテクニックはありますか? ビューまたはCTEを使用すると、一時テーブルよりもメリットがありますか?

また、各テーブルスプールにマウスを合わせると、出力リストが同じ一時テーブルからのものであることに気付きました。

1 Answer


17


さて、あなたが提供した情報で私はそれだけを伝えることができます:クエリオプティマイザは可能な限り最良の計画を選択しました。 テーブルスプールを使用して実行を高速化します。 テーブルスプールを使用しない代替手段はさらに遅くなります。

クエリ、テーブルスキーマとカーディナリティ、およびプランを表示してみてください。

更新

クエリを表示できない場合は確かに理解しています。 しかし、スプーリングが詳細を知らずにエンジンによって優先される理由を推測するのは本当に難しいです。 Craig Freedmanのブログをご覧になることをお勧めします。彼はクエリオプティマイザーチームのエンジニアであり、SQL 2005/2008オプティマイザーの内部動作の多くを説明しています。 以下に、ある形式または別の形式のスプールのトピックに触れる、すぐに見つけられるいくつかのエントリを示します。

SQLカスタマーサポートチームの興味深いブログもhttp://blogs.msdn.com/psssql/にあります。また、「sqltips」(リレーショナルエンジンのチームブログ)には、http://blogs.msdn.com/sqltipsのようないくつかのヒントがあります。 /archive/2007/08/30/spool-operators-in-query-plan.aspx [クエリプランのスプール演算子…​]