2010-12-07 8 views
0

私は非常に基本的な位置逆索引を使用していますが、多くの単語(検索語句)が格納されており、効率的な汎用検索を実装するために使用します。クエリプランのコンパイルとキャッシングを改善する

私の問題は、クエリプランのコンパイルが実際には実行自体よりもかなり長い時間がかかっていることです。私はそれについて何かできるかどうか疑問に思っていました。

  1. 私は(文字列からクエリを構築する)ダイナミックT-SQLを使用してい
  2. 私はCTEの
  3. の多くを使用していた初期の検索結果に依存したフィルタのチェックボックスの束があります人口のために(検索結果を取り、私に何らかの実体のある財産の数を教えてください)。例えば検索テキストで見つかった人物ごとに、関係する団体の数とそれぞれの頻度(カウント)を教えてください。これらを再評価する必要があります。
  4. 私はパラメータ化を行っています(しかし、いくつかの定数ではなく、デフォルトサイズを指定しています)、すべてのテーブルを修飾して、できる限りビューに依存しています。

新しいフィルタを適用するたびに、またはクエリプランが本当にうまく機能する以外の再コンパイルや時間がかかる検索語句の数を変更するたびに、クエリが構造的に変更されます。

事実これらのCTEとフィルタボックスの結果は、構造的に同等ではないにしてもほぼ同じかほぼ同じです。コンパイル時間を改善するために何かできるかどうか疑問です。

T-SQLを見たい場合は、サンプルを提供することができます。それは大きかっただけで、検索あたり約100行のT-SQLです。私が最初に尋ねると思ったのは、私たちがその道を行く前に、解決策がもっと簡単であると私は信じていますか?

答えて

1

OPTIMIZE FORクエリヒントを適用することを検討しましたか?

大きなクエリをより小さなパラメータ化ストアドプロシージャに分割し、その結果を組み合わせると、キャッシュされる可能性が高くなります。

SQL Server 2008のアドホックワークロード(これが最後かもしれないが)のために最適化するオプションもあります。

sp_CONFIGURE 'show advanced options',1 
RECONFIGURE 
GO 

sp_CONFIGURE ‘optimize for ad hoc workloads’,1 
RECONFIGURE 
GO 
+0

私は持っていないが、私はそれに見ていきます。ありがとう。 –