Kouhei Sutou
kou****@clear*****
2014年 4月 11日 (金) 11:07:25 JST
須藤です。 In <CADWOO5TF00NUt5qJTH8Bxpg6R_fja6Ncqn0jcxodrwJCG_fzUQ****@mail*****> "[groonga-dev,02209] 文字列以外の条件を追加してパフォーマンスを出す方法" on Thu, 10 Apr 2014 14:48:46 +0900, 番場岳郎 <yakin****@gmail*****> wrote: > 現在、mroongaを利用し、システムを構築していますが全文検索条件に他の条件を > 追加してパフォーマンスを出す方法で躓いています。 > > ■環境 > mroonga4.0.0 ラッパーモード > mysql 5.5.36-log ラッパーモードではMroonga固有のパフォーマンスチューニングはそ れほどないんです。MySQL一般のチューニングを使うことになりま す。 Mroonga固有のチューニングはMATCH AGAINSTするときにORDER BY LIMITをつけるというやつです。 http://mroonga.org/ja/docs/tutorial/wrapper.html#optimisation-for-order-by-limit-in-full-text-search で、これはすでに動いていると思います。 > ORDER BYは必ずつきます。(PKもしくはupdatedateで降順) > ちなみに、全文検索のみで実行すると早いです。 ということなので。 > ■SQL > SELECT * > FROM zzzz WHERE MATCH (titletext, maintext) AGAINST ('+東京' IN BOOLEAN MODE) > AND ccode = 0 AND dcode <> '99' > ORDER BY xcode DESC > LIMIT 0,200; 試しに、 EXPLAIN SELECT * ... としてみるとどうなりますか? # MySQLでは"<>"はインデックス効くのかしら。Groongaだと効かな # いんですけど。。。 > 全文検索を使用する場合、FULLTEXT INDEXにtextカラム以外は指定していないので > 条件次第で当然遅くなります。 これは、全文検索インデックス以外のインデックスを使えないので 遅い、って意味ですよね。 ストレージモードだと全文検索インデックスと他の「COLUMN = VALUE」みたいな条件のインデックスを一緒に使うことができるの で、そこがボトルネックなら速くする道はあったりします。 > ORDER BY(Sorting result)が一番のネックです。 ORDER BYが遅いということはヒット件数がたくさんあるという状況 でしょうか。 > このような場合、どのようにINDEXを設定するとよいのでしょうか。(もしくは他の方法?) 1つでもいいので、手元で試せるサンプルデータとテーブル定義と 検索SQLを出してもらえると、このメーリングリストを読んでいる 人が試してなにかアドバイスをくれるかもしれません。そういうテ ストデータセットを作ることはできますか?たぶん、ある程度の量 のサンプルデータを揃えないと再現しないと思うので、それが少し 面倒そうな気がしますが。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) Groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コードリーダー育成支援はじめました: http://www.clear-code.com/services/code-reader/