現象
Microsoft SQL Server 2014 または2016でビューにクエリを実行する場合、SQL Server 2008 R2 の実行結果と比較したときに、実行に時間がかかる場合があります。
UNION ALL と行のゴール (TOP N 句、FAST N、または EXISTS 述語など) を使用するクエリを実行すると、sql server 2008 R2 と比較したときに、SQL Server 2014 以降のバージョンでクエリの実行速度が遅くなることがあります。
原因
SQL Server 2008 R2 では、クエリオプティマイザーは、[UNION ALL] の下にあるさまざまなパーツの順序を変更します。これは、最も安価な部分が最初に表示されるようにするためです。 これにより、低コストのパーツでは、負荷の高いパーツの実行を継続せずに、必要な数の行を作成することができます。 このような並べ替えは、新しいバージョンの SQL Server では行われません。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで修正されています。
SQL Server 2016 RTM の累積更新プログラム7
SQL Server 2016 SP1 の累積更新プログラム4
SQL Server 2014 SP2 の累積更新プログラム6
注: この問題については、クエリ Optimiser が有効になっている必要があります。
クエリオプティマイザーとトレースフラグの詳細については、次のリンクを参照してください。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語について説明します。