2012-01-24 11 views
0

のような文のためのスピードアップソリューションは、テーブルからキャッシュと私は、MySQLのクエリに直面

を選択*のようになります。ここで、%LIKE table.a a%OR表.a LIKE%b%OR表.a LIKE%c%

ビジネス要件(これは何かを検索する必要があります)のために、このLIKE文が必要です。

だから、それをスピードアップすることが可能ですか? 使用できるキャッシュはありますか?いくつかのNoSqlソリューションが良いだろうか? 私たちは、メモリにすべてのテーブルをロードする場合でも、我々はまだ原因ためにこれら好きの全文スキャンに貧弱なパフォーマンスを持つこととします。私たちはそこに正規表現を使用している場合

それがより良いでしょうか? このようなテキスト検索の目的には、通常どのようなアプローチが適していますか? NoSqlに切り替えた方が良いでしょうか? 特定の製品は私たちを助けることができますか?

+0

[mysqlのようなパフォーマンスの向上](http://stackoverflow.com/questions/2481528/mysql-like-performance-boost) – JohnFx

答えて

1

問題は、ワイルドカードを使った検索が故に、あなたのパフォーマンスの問題、インデックスの非常に効率的に使用することができないということです。 RegExはうまくいかないでしょうが、実際は悪化するでしょう。

ワイルドカードを使用する理由がテキストフィールドから個々の単語を選ぶことになっている場合は、そのフィールドにfulltext indexを設定することをお勧めします。ワイルドカードを使わずに個々の単語を検索することができます。しかし、あなたの例%b%のような単語の部分を検索しているとあまり役に立ちません。理由はパフォーマンスの低いいくつかのクエリのNoSQLのへの切り替え

は極端なやり過ぎのように思える、と私はそれだけではその理由のためにそれを正当化するために十分役立つことはないだろう。

+0

問題は私たちがユーザーのニックネームを検索しているため、抽出され、索引付けされたトークン。どのようなキャッシュソリューションがありますか? –

+0

キャッシュは機能するかもしれませんが、ユーザーが事前に使用する検索語を知っていた場合や、同じ用語で頻繁に検索した場合にのみキャッシュが機能します。 – JohnFx

+0

キャッシングソリューションをお勧めしますか?または、単純なmysqlクエリキャッシュを使用できますか? –

関連する問題