2016-05-07 21 views
0

私は非常に大きなテーブルを持っているので、like % Xまたはlike '% X %のwhere句に基づいて更新を行っています。私は、名前欄をNameWord1、NameWord2に「分解」すると考えていたので、もっと複雑な部分を構築することができましたが、それぞれが少なくとも '='と '%'のようなものです。"contains"検索を高速化するMySqlのフルテキストインデックス処理

フルテキストインデックスに気付きましたが、同じ結果が得られる可能性がある場合は、ドキュメントでは明確ではありません。私はフルテキストインデックスをテストするために数百万のレコードテーブルに嫌われています。私は小さなテーブルでテストを見ることができませんので、パフォーマンスの向上について実際の洞察を与えてくれます。 MySqlフルテキストインデックスのフィードバックを入手して、問題への適応性を確認してください。

答えて

0

一般的な答えとして「はい」です。あなたのユースケースは、フルテキストインデックスのために設計されたものです。あなたは1を実装として心に留めておくべき

2つのこと:

  • 最小ワード長。デフォルトは、ストレージエンジンに応じて3または4です。あなたが1人のキャラクターを探しているなら、これは明らかに長すぎます。 (hereを参照してください。)
  • ストップワードリスト。これらは、情報価値がない(「それにもかかわらず」)またはあまりにも一般的である(「持っている」)ため、インデックスにない値です。

また、where句に他の条件が含まれていると、フルテキストインデックスがそれほど改善されないことがあります。

最後に、最後のひとつです。索引付けしている列が実際にコードのリストである場合、これらは結合表になければなりません。フルテキスト索引付けは利点をもたらす可能性がありますが、適切な索引を持つ適切なデータ構造ではパフォーマンスがさらに向上し、リレーショナル整合性も維持できます。

+0

実際には最小語長が問題になります。主に私がやっていることはアドレスフィールドのIDを作成しようとしており、その置換の大部分は方向(N、E、NE)と通りのタイプ(St、Ave、Pl)と関係しています。スフィンクスは実際の検索で素晴らしい作品です。「N Main St」の検索では「North Main Street」と一致するようになりますが、TableAの前者とTableBの後者のように、保存された表を標準化するためにさまざまな表を取得しようとしますどちらも同じstreetIDを持っており、関係することができます問題です。 – user3649739

関連する問題