'%keyword%'タイプの検索の問題は、その列にインデックスを作成したとしても、通常のテーブルで効率的に検索する方法がないことです。電話帳でその文字列をどのように表示するかを考えてください。実際にはそれを最適化する方法はありません-電話帳全体をスキャンする必要があります-そしてそれはMySQLが行うことであり、全表スキャンです。
その検索を「キーワード%」に変更してインデックスを使用すると、非常に高速な検索が可能になります。しかし、これはあなたが望むものではないようです。
そのことを念頭に置いて、私は全文索引付け/検索をかなり使用しました。ここにいくつかの長所と短所があります:
長所
- 非常に高速
- 関連性で並べ替えられた結果を返します(デフォルトでは、任意の並べ替えを使用できます)
- ストップワードを使用できます。
短所
- MyISAMテーブルでのみ機能します
- 短すぎる単語は無視されます(デフォルトの最小値は4文字です)
- where句に異なるSQLが必要なため、既存のクエリを変更する必要があります。
- 部分的な文字列と一致しません(たとえば、「word」は「keyword」と一致せず、「word」のみと一致します)
もう1つのオプションは、Sphinx などの検索システムを使用することです。 。非常に高速で柔軟性があります。検索用に最適化されており、MySQLとうまく統合されています。