[groonga-dev,02211] Re: 文字列以外の条件を追加してパフォーマンスを出す方法

Back to archive index

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/




groonga-dev メーリングリストの案内
Back to archive index