MySQLの文字列検索を高速で行う方法

100万レコードあるテーブルから文字列で高速検索したい!


文字列で検索する時は、該当フィールドにインデックスつけて、
先頭一致のLIKE検索しかないのかと思ってたんですが、
それより速そうな方法を教えてもらいました。

FULL TEXT の Ngram 検索

検索したい文字列が「土曜と祭日は休みたい」という文字列だとする。
別のフィールド「feild」を作って、feildにはFULL TEXTのインデックスを設定する。
内容には次のNgram文字列を作って保存する。

土曜 曜と と祭 祭日 日は は休 休み みた たい

実行するのはこんなSELECTクエリ

SELECT * FROM Table WHERE MATCH (feild) AGAINST ( '+土曜 +休み' IN BOOLEAN MODE)

実行するとHITする。LIKEより速い。わーい。

参考

Ngram文字列やWHERE句の部分の簡単な作り方はこちらへどうぞ。
MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について

2011-10-07追記

FULL TEXTインデックスを行った結果、インデックスデータの容量が増えて容量オーバーしました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です