4

MySQL では、次のような検索を実行します。

SELECT * FROM people WHERE surname LIKE '%ton';

LIKE の対象となる列がインデックス化されている場合でも、低速です。これを高速化するためのテクニックはありますか?

私が考えることができる最良のアイデアは次のとおりです。

  1. 問題の列を逆にして、新しい列を作成します。つまり、ワシントン => notgnihsaW AND Jefferson => nosreffeJ

  2. LIKE '%ton' 検索を実行する場合は、接尾辞を逆にします (例: ton > not)。次に、新しい列で LIKE 'not%' 検索を実行します。

これは単純な解決策ですが、新しいデータを追加するたびに反転列を再コンパイルする必要があります。

4

1 に答える 1

1

サフィックスマッチングの優れたソリューションをすでに提案しています...逆の列を保存し、それを逆のプレフィックスマッチングに使用します。私はこれを行いましたが、実際には非常にうまく機能します。

ハリントン、カールトン、ミルトンなどの姓の人を探しているようです。

それが正しければ、FULLTEXT は良い解決策ではありません。部分単語ステミングは行いません。

于 2014-06-03T17:24:41.533 に答える