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

Back to archive index

Kouhei Sutou kou****@clear*****
2014年 4月 11日 (金) 23:18:23 JST


須藤です。

In <CADWO****@mail*****>
  "[groonga-dev,02213] Re: 文字列以外の条件を追加してパフォーマンスを出す方法" on Fri, 11 Apr 2014 22:48:10 +0900,
  番場岳郎 <yakin****@gmail*****> wrote:

>> 試しに、
>>
>>   EXPLAIN SELECT * ...
>>
>> としてみるとどうなりますか?
>> # MySQLでは"<>"はインデックス効くのかしら。Groongaだと効かな
>> # いんですけど。。。
> 
> 全文検索用インデックスだけがKey欄に表示されていますね。
> ストレージモードではExtra欄からUsing filesortが消えたので他のインデックスも使われているのかな。

実際、速くなっていますか?
速くなっているのであれば、MySQLに返すレコード数が減ってソー
トの負荷が下がったのかもしれません。

> あと、"<>"はインデックスきかないですね。

あぁ、やっぱり。

>> ストレージモードだと全文検索インデックスと他の「COLUMN =
>> VALUE」みたいな条件のインデックスを一緒に使うことができるの
>> で、そこがボトルネックなら速くする道はあったりします。
> 
> インデックス複数使用はストレージモード限定なんですね。

はい、そうなんです。
ストレージモードのときはGroongaのデータベースの中に全部のデー
タがあるので、Groongaレベルですべての条件を使って検索して
MySQLに返す、という風にして複数のインデックスを使っています。
ラッパーモードのときはInnoDBとかラップしているストレージエン
ジンがデータを持っているので、Groongaレベルで検索ということ
ができないんです。

Groongaレベルですべての条件を使って検索できるパターンはドキュ
メントに…書いていないですね。。。

  http://mroonga.org/ja/docs/tutorial/storage.html#optimisation-for-order-by-limit-in-full-text-search

あたりに書いてあって欲しかったですね。。。
# う、だれか書いてくれませんか。。。

  https://github.com/mroonga/mroonga/tree/master/mysql-test/mroonga/storage/optimization/order_limit/optimized

の下にあるSQLは複数のインデックスを使えるパターンです。

  MATCH AGAINST AND column = value

みたいなパターンです。

実際に実行してみれば明らかに速度が違うので↑の最適化が効いて
いるかどうかはすぐにわかるはずです。

最適化のパターンは割と簡単に増やせて、↓を変更すれば済みます。
なので、今の時点では速くならなくても速くできる余地はあります。

  https://github.com/mroonga/mroonga/blob/master/lib/mrn_condition_converter.cpp

> まだ、問題は解決していませんが現象を整理したいのでもう少し、試行錯誤してみます。
> 整理できたらまた相談させてください。

はい!

> 回答ありがとうございました。

いえいえ!

-- 
須藤 功平 <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/commit-comment.html




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