1

ストアドプロシージャで使用されるMSSQLクエリに非常に奇妙な問題がありますが、ここでは問題の核心を示すために単純化しています。

クエリは次のとおりです

SELECT vs.fv_numer FROM win.v_sprzedaz vs

ビューはかなり複雑ですが、実行には約 2 秒かかります。そして今驚き:

DECLARE @test=1
SELECT vs.fv_numer FROM win.v_sprzedaz vs
WHERE @test =1

クエリの実行には 15 秒かかります。

知識が不足しているため、実行計画を詳細に分析しませんでした (どちらの場合も異なり、非常に複雑です)。なぜ?

4

1 に答える 1

0

推測では、where句が原因で、ビューで使用されているインデックスが参照されていません。それらを強制するには、いくつかのQUERYHINTをビュークエリに入れる必要があります。

あなたのDBを知らなければ、それに指を置くのは難しいです。しかし、私には、クエリプランも最適化できないように思えます。

このような問題を解決するための私の好ましい方法は、ビュークエリを取得し、徐々に@testを追加して何が変化するかを確認し、@testが違いをもたらさなくなるまで条件を徐々に削除して調査することです。次に、衝突が表示されます。次に、ビューの他のユースケースに影響を与える可能性があるため、最適化を最適に追加する方法を調査する必要があります。

于 2012-12-15T10:29:31.223 に答える