2011-01-06 1 views
0

私が作成しているWebサイトについて記事、製品、おそらくForumThreadForumPostsテーブルのようないくつかのテーブルを検索する必要があります。私は今これらのテーブルのそれぞれに対して非常に単純なLIKE検索クエリを持っていますtitleカラムVARCHAR(255)。タイトル列も索引付けされています。初心者を検索してください、全文を使用する必要がありますか? (SQL Server 2008 Express R2)

将来的には、Descriptionフィールドも参照してください。これはVARCHAR(Max)のフィールドであり、多くのレコードがある場合はこれが非常に遅くなると推測しています。

は今、私は、フルテキスト検索に出くわし、それについて以下の質問があります。

  • フルテキスト検索は、単純な検索操作のこれらの種類をスピードアップするのだろうか?
  • 同様の方法でLIKEクエリを使用することはできますか、すべての検索クエリを書き直す必要はありますか?
  • 多分、フルテキスト検索関連ではないかもしれませんが、複数のテーブルを検索するにはどうしたらいいですか?私は今、各テーブルを一つずつ照会しています。
  • 私は(私は今1ギガバイトのRAM VPS上だので)私はこれで絶対に経験がない見ることができるように、この

より多くのRAMを食べるようになる、フルテキスト検索を有効にした場合

  • 、と後であっても私はまだそれが本当に何をしているのか少し混乱しています。

    私は誰かが私にこの上の小さな指針を与えることができることを望む

    は、お時間をいただき、ありがとうございます。

    敬具、アプリケーションが名前を格納するためではなく、テキストの簡単なフィールドよりもテキストのBIGブロックの集中的な検索を行うために必要がある場合 マーク

  • +0

    次のように見てください:http://ewbi.blogs.com/develops/2007/05/normalizing_sql.html – NotMe

    答えて

    0

    フルテキスト検索は、本当にために意図され、説明など

    たとえば、書籍やCVのコンテンツをすばやく検索するなどの目的で使用しました。実際には、格納されているすべてのコンテンツの単語ごとのインデックスが作成されます。大量のビットで作業していないと、テキストの

    代わりに、Varcharの代わりにnVarchar(Max)を使用することができます。これは、(ほとんどの既知の人間のアルファベットシステムからの)Unicodeテキストを処理する能力を提供し、上記で概説したように。

    1

    フルテキスト検索と単純なLIKE検索の間にある代替方法は、パフォーマンスの向上、重み付け機能の向上、複数の表の検索の簡素化など、独自のキーワードインデックスを作成することです。テーブルを作成します。

    keyword count tableid columnid rowid 
    ------- ----- ------- -------- ----- 
    varchar int int  int  int 
    

    あなたはもちろん、今までにこれを維持するためにトリガーまたはいくつかの種類のサービスが必要ですが、何をして終わることは軽量クロス、関連するすべてのキーワードの数の参照、どこであるだろう彼らは現れる。検索クエリは、このインデックス内のキーワードを検索するだけで済みます。

    これはキーワードでのみ機能します。そのため、フレーズで検索できるようにしたい場合は機能しません。また、複数形や無関係な言葉を扱うロジックを組み込む必要があります。一方、それは非常に高速です。LIKE検索でパフォーマンスが問題になり、キーワード検索だけでなく、フルテキスト検索が必要な場合は、おそらく最善の方法です。

    +0

    興味深い代替 – NotMe

    +0

    私はこれをMySqlを使用して以前から何かのために実装していました。当時はどんな種類のテキストも検索されていませんでしたが、何があってもアプリケーションがあると思います。良い実装は、実際のキーワードの代わりにハッシュを使用して正規化することで最適化され、すべてのキーワード(またはハッシュ)だけのテーブルを保持し、その後、カウントの実際のデータが格納されている別のテーブルを表示します。 2番目のテーブルは長くなりますが、それはすべて数字なので、クエリは非常に高速です。 –

    2

    LIKEベースのクエリの大きな問題は、ほとんどの場合、通常のインデックスを使用できないことです。したがって、パフォーマンスの向上に役立つように説明列にインデックスを追加することは、あなたには何の役にも立たないでしょう。フルテキストクエリは、次の2つの部分で構成されます。1) LIKEの代わりにCONTAINS()キーワードを使用するようにクエリを変更し、2)これらのキーワードを使用するクエリでは、の。

    ここには、フルテキストが大きな影響を与えるかどうかを判断するのはフィールドのサイズだけではありません。また、行数です。あなたは単純なnvarchar(100)を持っているかもしれませんが、それは短いフレーズを保持すると予想されますが、何百万もの行を検索しなければならない場合、キーには「検索する必要があります」という部分があります。作業セットを大幅に制限するその他のフィルタがある場合は、LIKEクエリがうまくいくかもしれません。別のシナリオでは、数十行しかないnvarchar(max)フィールドがありますが、これらのレコードのそれぞれに小文字のテキストがあります。この場合でも、フルテキストインデックスを使用することになります。

    フルテキスト検索には他にも2つの重要な考慮事項があります。 1つは、ディスクスペースを浪費する傾向があることです。これはほとんどのデータベースではあまり重要ではありませんが、言及する価値があります。もう1つは、アーティクルがDBに追加された瞬間を検索する準備ができていないように、手動で再計算する必要があることがよくあります。

    関連する問題