1

私はこれについて非常に混乱しています。最終的なSQLステートメントが動的に構築され、多くの関数とプロシージャがこれに関与しているため、例を提供できません...

一般的に、私は5つの結合を持っています。それらの1つを削除すると、ステートメントが0秒間実行され、それ以外の場合は4分以上実行されることに気付きました。次に、実際の実行プランを調べたところ、「マージ結合」には多くのコストがかかることに気付きました。Googleで検索すると、または「OPTION(MERGE JOIN)」を使用して「INNERMERGE JOIN」が表示され、ステートメントが終了します。

クエリが0秒間実行されるので、これは本当に良かったです。しかし、私の質問はなぜですか?

少し調べてみたところ、MERGE結合を使用するには、2つのステートメントを並べ替える必要があることがわかりました。これは私の場合ではなく、そうではなく、0秒で正しい結果が得られます。

なぜこれが発生する可能性があるのか​​、T-SQLのアイデアを進歩させた人はいますか?

私はすでに解決策を持っていることを知っていますが、なぜこれが機能しているのか、そして何が起こっているのかを知りたいです。

4

2 に答える 2

3

これが発生する可能性がある理由の1つは、遅いプランでネストされたループを使用し、コストの高いものを使用して内部のクエリを評価する場合です(コスト見積もりが不正確なためにプランが選択されました)

マージ結合ヒントを指定すると、コストのかかるクエリが(説明からの並べ替え演算子への入力として)一度だけ評価され、繰り返し評価されることはありません(マージ結合は各入力を1回通過します)。

これが当てはまるかどうかを確認するには、低速バージョンと高速バージョンの両方の実行プランをキャプチャする必要があります。

于 2012-08-10T12:43:30.307 に答える
0

クエリオプティマイザは、プランを作成する際に結合の数を考慮します。私はこれとまったく同じシナリオを見てきました。5つの参加で異なるアプローチを取ります。テーブルヒントを使用して、クエリプランを強制できます。結合ではなく和集合または交差を使用するようにクエリを再構築することもできます。

于 2012-08-10T12:51:31.080 に答える