2009-07-10 6 views
1

本当に遅いです実行に非常に長い時間を選択し、しばしばタイムアウトします。グループを削除すると、実行速度がやや速くなり、結合をLEFT OUTER JOINに変更すると、処理速度が向上します。は、私は現在のように見えるMSSQL内でのクエリで働いています

2つの内部選択を集約するselectでグループを実行すると、クエリが遅く実行されるのはなぜですか?なぜINNER JOINはLEFT OUTER JOINより遅く動作しますか?これをさらにトラブルシューティングするにはどうすればよいですか?

EDIT:7月の開始日と7月の他の日の両方を調べると、2つの内部クエリで日付が制限され、全体的なクエリが遅くなりますが、日付範囲が7月1日の前にいつでも、今日はうまくいきます。

+0

詳細を投稿 –

答えて

0

t1.joinfieldに結合条件を追加します。データが最適化された後、妥当な時間制約内でクエリが実行され始めました。

1

クエリの詳細をもう少し明かすことなく、クエリの速度を上げる可能性のあるヒントを提供することは不可能です。 2つの内部クエリは、結合を実行して大規模なスキャンを実行した可能性のあるインデックスへのアクセスをブロックしている可能性がありますが、おそらく他にも多くの理由が考えられます。

はその後、ダウン基本的な実行は、クエリを実行している

http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx

ここで詳細な説明があり、時間が実行計画を確認するクエリで使用される場合にチェックして、実行計画を表示するには大きなパーセンテージを探します。これは、クエリを遅くするものです。

0

ほとんどの場合、ネストされたSELECTを使用しないでクエリを書き直してください。ネストされたSELECTを使用する場合(ただし、例外的な場合を除く)、内部のSELECT結果セットは索引付けされません。

Tetraneutronによると、あなたの質問の詳細を投稿しました。私たちはあなたがそれをまっすぐに書き直す手助けをするかもしれません。

0

JOIN =デカルト積。両方のテーブルのすべての列は、多数の順列で結合されます。内部クエリーは別々のテーブルのそれぞれにクエリーを実行しているため遅いですが、ジョインした後はデカルト積になり、管理が難しくなります。これは外側のselectステートメントで発生します。

Tetraneutronが推奨するようにINNER JOINをご覧ください。

0

結合述語を指定しましたか?つまり、テーブルAにテーブルを追加します。テーブルtable.ColA = table.ColB。述語を与えないと、SQLはネストされたループを使用することがあります。その範囲に多くの行があると、クエリが遅くなることが説明されます。

再生するMS SQL Serverをお持ちの場合は、SQLスタジオのプランをご覧ください。

0

あなたt2の文の後に問題が断片化されたデータとあった= t2.joinfield

関連する問題