sql >> データベース >  >> RDS >> Mysql

全文検索が答えですか?

    '%keyword%'タイプの検索の問題は、その列にインデックスを作成したとしても、通常のテーブルで効率的に検索する方法がないことです。電話帳でその文字列をどのように表示するかを考えてください。実際にはそれを最適化する方法はありません-電話帳全体をスキャンする必要があります-そしてそれはMySQLが行うことであり、全表スキャンです。

    その検索を「キーワード%」に変更してインデックスを使用すると、非常に高速な検索が可能になります。しかし、これはあなたが望むものではないようです。

    そのことを念頭に置いて、私は全文索引付け/検索をかなり使用しました。ここにいくつかの長所と短所があります:

    長所

    • 非常に高速
    • 関連性で並べ替えられた結果を返します(デフォルトでは、任意の並べ替えを使用できます)
    • ストップワードを使用できます。

    短所

    • MyISAMテーブルでのみ機能します
    • 短すぎる単語は無視されます(デフォルトの最小値は4文字です)
    • where句に異なるSQLが必要なため、既存のクエリを変更する必要があります。
    • 部分的な文字列と一致しません(たとえば、「word」は「keyword」と一致せず、「word」のみと一致します)

    全文検索に関する優れたドキュメントがいくつかあります

    もう1つのオプションは、Sphinx などの検索システムを使用することです。 。非常に高速で柔軟性があります。検索用に最適化されており、MySQLとうまく統合されています。



    1. MySQLがgroupbyで最大レコードを選択

    2. すべての派生テーブルには独自のエイリアスが必要です-MySQLの降順の組み合わせによるエラー

    3. 新しい行を挿入するときにのみcurrent_timestampを設定します

    4. ストアドプロシージャのパラメータとしてリストを渡すにはどうすればよいですか?