2016-04-18 10 views
1

DBのすべてのフィールドを検索するために使用する "広範な検索"機能を実装しようとしています。SQL Server:クエリが遅い、たくさんの好き

以下のクエリのパラメータはすべて "%馬%"で、私のローカルDBはこれを約15秒で実行します。

"%[^ A-Za-z0-9]馬[^ A-Za-z0-9]%"を使用すると、 "馬"が独立した単語になります。クエリは30 +秒かかります。

データベースには3000個のオブジェクトが含まれています。クエリを適切な時間に実行するように最適化できますか?または私は全文索引のような何かを考慮する必要がありますか?

+0

テーブルの実行計画と 'DDL'を提供してください。 – Devart

+0

動的SQLは苦痛で危険なことがありますが、選択したオプションだけでクエリ文字列を作成し、多くのまたはステートメントではなく実行する方が良い場合があります。 – Jeremy

+0

もさまざまなオプションでこの記事をチェックしてください。 http://www.sommarskog.se/dyn-search.html – Jeremy

答えて

1
  1. DISTINCTを使用すると、欠陥のあるデータモデルがある可能性があります。
  2. NULLをチェックするのは冗長なようです。
  3. すべての列値にスペースを追加することがsargableではないので、あなたのクエリが遅くなりますひどいアイデアです:

は、WHERE句で(すべての列の)この構文を試してみてください代わりに

(tblCollection.CollectionID like '%[^A-Za-z0-9]horse[^A-Za-z0-9]%' escape '\' or 
tblCollection.CollectionID like 'horse[^A-Za-z0-9]%' escape '\' or 
tblCollection.CollectionID like '[^A-Za-z0-9]horse' escape '\') 
+0

ありがとう! 2.30秒より約15秒の短縮時間。 あなたの例で3つのケースすべてをチェックする理由を説明できますか?最初は十分でしょうか? – GINGERT

+0

最後の2つを除外した場合、馬で開始または終了する列を含む行は選択されません –

関連する問題