パフォーマンスを向上させるために、例外のないすべてのサブクエリが一時テーブルで書き換えられたソリューション(SQL Serverの場合)に取り組んでいます。すべてのサブクエリを一時テーブルに置き換える必要がありますか?
例を与えるために、このようなすべてのクエリ:
SELECT something
FROM (SELECT * FROM T1 WHERE condition1)
JOIN ...
はこのように書き換えされています:
SELECT *
INTO #tempTable
FROM T1
WHERE condition1
SELECT something
FROM #tempTable
JOIN ...
また、すべてのサブクエリは避けるべきであることをhereが示唆されていますテンポラリテーブルを利用しています。
与えられた事実に基づいて、すべてのサブクエリを一時テーブルに置き換える必要がありますか?どちらか一方を他方よりも考慮する必要がある場合は、
これはすでにここに答えた:
はhttp://stackoverflow.com/questions/16767645/why-is-there-a-huge-performance-difference-between-temp-table-and-subselectと、この:
http://stackoverflow.com/questions/2825342/why-would-using-a-temp-table-be-faster-than-a-nested-query –
SQL Serverの例外ルールを使用しない絶対的な唯一の方法は、「it依存する "。私は、すべてのサブクエリを暫定的に盲目的に臨時テーブルにすることは、無駄と不満の練習であることを強く主張します。場合によってはパフォーマンスが向上する場合もありますが、他の場合は悪化する可能性があります。 100万行のサブクエリを考えてみましょう。これは、多くのデータをテンポラリテーブルにコピーするコードを書き込むための素晴らしい方法ではないかもしれませんが、遅くなるでしょう。そして、せいぜいあなたは存在していないパフォーマンス問題を「修正」しているかもしれません。 –
これはあなたが探している答えのほとんどです:http://stackoverflow.com/a/11169910/2333499 – SqlZim