お世話になります。
php・MySQL(5.6)を使用してWEBアプリケーションを作成しております。
現在、フリーワード検索を実装中なのですが、高速にデータを検索することができず困っております。
皆様のお知恵をお貸し下さい。
要件は、「1秒以内に約100万件のデータに対してフリーワード検索を行い、取得結果をソートして表示する」です。
この要件を満たす為に、下記のような検索用テーブルを作成しました。
id | point1 | point2 | freeword
PRIMARYKEY -- id
INDEX -- point1, point2 (複合index)
FULL TEXT INDEX -- freeword
エンジン MyISAM
LIKE句を使用した場合、速度がでないと聞きましたのでfull_text_searchを採用しました。
freewordには、『名前』をBIGRAM、UNIGRAM化したものを入れています。
このテーブルに対して、下記のようなSQL文を流しています。
SELECT SQL_CALC_FOUND_ROWS
id
FROM table
WHERE
MATCH(freeword ) AGAINST('+"あい" +"いう"' IN BOOLEAN MODE)
ORDER BY
point1 DESC
,point2 DESC
EXPLAINの結果をみつつ、自己結合してみたりサブクエリを流してみたりチューニングを試みておりますが、どうしても取得結果をORDER BYすることによるソート処理で時間がかかっているようです。
FULL TEXT INDEXとINDEXの2つのINDEXを効かせることで高速に検索できるようになりませんでしょうか。
分かる方がいらっしゃいましたらご回答をお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/15 15:03