2011-08-15 9 views
2

MSSQLのCTEとテーブルの変数を使用した場合と一時テーブルを使用する場合のパフォーマンスの違いを誰でも簡単に分けることができます。私は一時テーブルを頻繁に使用してきましたが、明確な構文のためにCTEを使用し始めましたが、私はそれらがより遅くなることを発見しました。私はテンポラリテーブルがシステムメモリを使用していると思うので、それらは速く見えますが、複数のジョブを実行しようとするとボトルネックになる可能性があります。テーブル変数私は控えめに使用しており、大したことは分かりません。グルの外からのアドバイスをお探しですか?テンポラリテーブルのストレージパフォーマンスの比較

+0

記述されている(そしてまた、彼らは、照合のように、特定のプロパティのためのサーバのデフォルト設定を継承します)。しかし、私がコメントした主な理由は、あなたのタグがmssqlではなくmysqlであると言うことでした。 – tomfumb

+0

@tomfumb、それらはtempdbシステムデータベースに格納されます。 –

答えて

0

のセットに通過Books Online、MSDN、およびこのサイトでよくカバーされています。

ここで読むことができる一時テーブルとテーブル変数についてはWhat's the difference between a temp table and table variable in SQL Server?です。 多くの場合、テンポラリテーブルはプロシージャの再コンパイルを引き起こすことがありますが、これは主な欠点です。

のCTEはよくメモリにそうとは限らない、私は一時テーブル(#table)は、システムのDBに格納されていると信じてここにhttp://blogs.msdn.com/b/craigfr/archive/2007/10/18/ctes-common-table-expressions.aspx

0

CTEはパフォーマンスに中立です。 SQLステートメント(通常は複雑なJOINやフィールドに適用される組み込み関数)を抽象化することによって、開発者のクエリを簡略化します。データベースエンジンは、CTEを使用するクエリにCTEをインライン化するだけです。したがって、CTE自体は「低速」ではありませんが、データベースエンジンが一時テーブルを使用するクエリでより良いクエリプランを作成しているため、一時テーブルでパフォーマンスが向上していることがあります。

0

この質問はherehereと回答しました。 簡単に言えば、これは異なるタスクのための異なるツールです。

  • 表変数が一時テーブル
  • 一時テーブルよりも少ない数のストアドプロシージャの再コンパイルのを導くことができる。この問題は、再使用のために良好であるか、または複数の処理を実行すると、データ