SQL Server 2008 上で実行したクエリがとんでもなく遅かったときの対処法のメモです。想定外のインデックスを使用してフルスキャンかましてくれたときに、紹介する方法で問題をで回避しました。

自分のクエリの記述に自身がありかつ、統計を最新化してもとんでもない実行プランになる場合、 クエリヒントでOPTION (FORCE ORDER) を使えばパフォーマンスが向上する可能性があります。

OPTION (FORCE ORDER) はクエリ全体に対して、SQL Server がクエリの順番通りにSQLを処理させるオプションです。フルスキャンをさせないように、オプティマイザーに対し、クエリで参照されているテーブルやビューのデータへのアクセス 方法としてインデックスシークのみを使用することを指定するOPTION (TABLE HINT(tbl, FORCESEEK)) を使用することもできます。tblは、テーブル名です。FORCESEEKに関しては下記URLを参照。

プラン ガイドでの INDEX および FORCESEEK のクエリ ヒントの使用
http://msdn.microsoft.com/ja-jp/library/bb677261.aspx

http://msdn.microsoft.com/ja-jp/library/ms187373.aspx

私の場合、Dynamics CRM 4 の FilteredView に対してクエリを発行する SSRS のレポートを作成していました。結構簡単な結合条件だったのに、実行プランを確認すると想定外のインデックスを使用してフルスキャンしていました。 OPTION (FORCE ORDER) もしくは FORCESEEKヒント をクエリに指定すると 50倍以上速くなりましたよ orz。

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

© 2014 netplanetes log Suffusion theme by Sayontan Sinha