2012-04-18 12 views
0

フルテキストインデックスを使用せずに可能ですか、キーワードに基づいて巨大なテーブルを検索できますか?テーブル内のSQL Serverの検索数百万行

私は用語Country man workingを検索すると、それは次のような結果が返されます。

  1. 国の人が失敗の危機にひんして
  2. 国の仕事を始め
  3. 男が
+3

フルテキストインデックスを使用できないのはなぜですか? LIKEまたはCHARINDEXステートメントを使用しないと、このような大きなテーブルでは恐ろしく遅くなります。 –

答えて

0

これは返す必要があります彼の仕事を始めたのあなたの必要な結果:

SELECT * 
FROM TABLE 
WHERE Field LIKE '%country%' 
OR Field LIKE '%man%' 
OR Field LIKE '%working%' 

速度には何の保証ありませんコメントけれども...


ノート - これは実際にこれを行う方法はありません。フルテキストインデックス作成は使用する方法ですが、なぜオプションではないのかを詳しく説明していません。

+0

検索はあまり簡単ではありません。このクエリはすべてのインデックスを無視します。私たちはより良いパフォーマンスが必要です。 –

+3

あなたは全文索引なしでそれを行う方法を求めました。それで、ここにあります。もう1つの方法はフルテキストインデックスを作成することです。フルテキストインデックスを作成する方がはるかに良い方法です。 – Paddy

+0

しかし、 'LIKE '%man%''検索式では、基本的に完全なテーブルスキャンを行っています。インデックスが使えないので、何百万行ものテーブルを持つテーブルでは**驚くほど遅くなります**いつも** .... –

1

ディクショナリ内のすべての単語からノイズワードを除いたテーブルを作成します。

辞書の単語を検索したいテーブルにテキスト列に表示されたリンクテーブル内のレコードを作成するために、いくつかのコードを書いて、あなたのデータテーブルに

を辞書キーワードテーブルをリンクするテーブルを作成します。

その後、あなたはこのようなビットを検索することができます:唯一の擬似コードザッツ

SELECT T.TextStuff 
FROM KeywordTable AS K 
JOIN LinkTable AS L ON L.KeywordID = K.KeywordID 
JOIN TableToSearch AS T ON T.KeyWordID = L.KeywordID 
WHERE K.Keyword = 'Country' 
OR K.Keyword = 'man' 
OR K.Keyword = 'working' 

、うまくいけば、それはアイデアを実証します。セットアップに時間がかかりますが、LIKEのものをやっているよりも優れたパフォーマーでなければなりません。

要約すると、行ごとに1語、リンクテーブルで検索したいものと一致するものを探し、元のテーブルのレコードにアクセスできます。

関連する問題