1

シナリオ:

T-SQL ストアド プロシージャ (Sql Server Management Studio) を使用して、MS インデックス サービスとこの (簡略化された) クエリを使用して、テキスト ドキュメントの検索一致を返します。

SELECT * 
FROM openquery( 
  filesystem2, 
  'SELECT 
     Path, Rank, Filename
   FROM 
     SCOPE('' "e:\test\documents" '')
   WHERE 
     CONTAINS('' FORMSOF (INFLECTIONAL, "test" ) '')
   ') b 

このクエリは数日前に正常に機能しなくなりました。完全に実証されたわけではありませんが、プロパティ キャッシュとマスター インデックスの間の相互作用が適切に機能していないようです。

1) SCOPE パラメータを削除します (つまり、FROM 句として "FROM SCOPE()" を使用するだけです)。

2) WHERE 句を削除 (および SCOPE 関数をそのまま維持)

したがって、コンテンツまたはロケールだけで目的のドキュメントを「見つける」ことはできますが、両方を一緒に使用することはできません。

1 つのオプションは、カタログを再インデックス化することですが、現時点では、再インデックス化は最後の手段にすぎません。

そうは言っても、クエリを書き直して、指定された SCOPE を除外し、追加の WHERE 句を含めました。

SELECT * 
FROM openquery( 
  filesystem2, 
  'SELECT 
     Path, Rank, Filename
   FROM 
     SCOPE()
   WHERE 
     CONTAINS('' FORMSOF (INFLECTIONAL, "test" ) '') and 
     Path like ''%e:\test\documents%''
   ') b 

このクエリは、検索時に適切なドキュメントを返します。ただし、LIKE キーワードを使用するとパフォーマンスが低下する可能性があることを懸念していました/懸念しています。そのため、各クエリの実行計画を調査しましたが、それらはまったく同じでした...これは、次の2つのうちの1つを示しています。

1) インデックス サービスのクエリ コンポーネントは、両方のクエリが等しくなるように最適化します。

2) DB テーブルが参照されていない場合、クエリ アナライザーはリモート クエリに対して正確なフィードバックを提供しません。

質問(順不同)。誰かが次のことについて何か洞察を持っていますか?:

1) 上記のシナリオで説明した、プロパティ キャッシュとマスター インデックスの間の元の問題の動作の原因は何ですか?

2) 実行計画について

a) Would the Querying Component process/optimize both queries the same?

b) Can Sql Server Management Studio provide execution plan feedback for openquery queries that do not reference any DB tables?

3) 最後に、どのクエリがより効率的/高速で、その理由は?

a) i.e. should I use the second one because it solves my problem?

ありがとうございました!

4

1 に答える 1

2

null値が問題になる場合があります。この正確なケースについてはわかりませんが、" where xxx is not null" を含めると大きな違いが生じる場合があります。

もう 1 つのオプションは、open query の後に where 条件をテーブルに置くことです select aaa, bbb from openquery(.....) where aaa = zzz。(スタイルを向上させるには、* の代わりに必要な列を選択してください。

どちらがより効率的または高速かについては、単純なタイミング プロセスでクエリをラップし、SQL 管理の既定のメッセージによって提供されるメトリックを使用できないかどうかを自分で判断する必要がある場合があります。

最後に、クエリが機能し、プロジェクトに設定した標準に違反しない限り、使用してください。

于 2009-06-05T19:14:18.130 に答える