[Ludia-users 215] Re: 全文検索+ORDER BY について

Back to archive index

kousa****@nttda***** kousa****@nttda*****
2008年 4月 15日 (火) 11:00:17 JST


幸坂です。こんにちは。

ludia.max_n_sort_resultを10000にしているなら、
ソート処理に時間がかかっているわけではなさそうですね。

単純にDBのテーブルからデータを取り出す処理に
時間がかかっていると思われます。
(同じクエリを連続して流した場合、
2度目以降は1秒以内に返ってくると思います。)

◆3を早くしたい場合は、
・shared_buffersを大きな値にする。
・SELECT COUNT(*) FROM item; でDBを暖めておく。
などの方法を用いて、テーブルのデータをできるだけ
メモリ上に置く必要があります。
また、ludia.max_n_sort_resultをもっと小さい値にして、
アクセスするデータを少なくする方法もあります。


ludia.max_n_sort_resultはスコアの上位を取り出す仕様ですが、
自分で設定した値(今回の例ではprice列)の上位を取り出せるように
変更したいと考えています。
しかし、PostgreSQL8.3のVACUUM対応や、
Windows対応などのタスクが残っているため、
優先順位が低い状況となっております…。

> -----Original Message-----
> From: ludia****@lists*****
> [mailto:ludia****@lists*****] On Behalf Of motoi
> sugito
> Sent: Thursday, April 10, 2008 8:54 PM
> To: ludia****@lists*****
> Subject: [Ludia-users 214] Re:全文検索+ORDER BY について
> 
> お世話になっております。杉藤です。
> 
> 説明不足でした。申し訳ござません。
> 
> > SELECT count(*) FROM item WHERE descr %% '価格';
> > SELECT pgs2getnhits();
> > これらのクエリはそれぞれ何件ぐらい返ってきますか?
> > この値がわからないと、何とも言えません…。
> 
>  この場合では10万件くらい返します。
>  ただ、ありふれたフレーズを指定したクエリでは
>  30万件以上を返す場合もございます。
> 
>  ちなみにパラメータ「ludia.max_n_sort_result」には
>  「10000」を指定しております。
> 
> 以上です。よろしくお願い致します。
> 
> 
> 08/04/10 に kousa****@nttda*****<kousa****@nttda*****> さんは書
> きました:
> > 幸坂です。こんにちは。
> >
> > SELECT count(*) FROM item WHERE descr %% '価格';
> > SELECT pgs2getnhits();
> >
> > これらのクエリはそれぞれ何件ぐらい返ってきますか?
> > この値がわからないと、何とも言えません…。
> >
> > > -----Original Message-----
> > > From: ludia****@lists*****
> > > [mailto:ludia****@lists*****] On Behalf Of motoi
> > > sugito
> > > Sent: Tuesday, April 08, 2008 6:16 PM
> > > To: ludia****@lists*****
> > > Subject: [Ludia-users 212]全文検索+ORDER BY について
> > >
> > > はじめまして、杉藤と申します。
> > > Ludiaについて質問させてください。よろしくお願い致します。
> > >
> > >
> > > 【概要】
> > > Ludiaを使って全文検索を実行し、且つその結果をソートして
> > > 表示したいのですが、どうしても処理結果が返るのに10秒以上
> > > 掛かってしまいます。
> > > 検索結果を一瞬(せめて3秒以内)で返るようにしたいのですが、
> > > 何かよい方法はございませんでしょうか?
> > >
> > >
> > > 【環境】
> > > O S : CentOS5.1
> > > D B : PostgreSQL 8.3.1
> > > Ludia : 1.5.0 (mecab-0.97 ipadic-2.7.0 senna-1.1.2)
> > >
> > >
> > > 【詳細】
> > > ◆以下の構造のテーブルがあり、400万件データを保持してます
> > >
> > > テーブル名:item
> > >  colmun | type
> > > ------------------------
> > > title | varchar(512)
> > > price | integer
> > > descr | text
> > > :
> > > :
> > >
> > > ◆このテーブルには以下のインデックスを設定してます。
> > > "idx_item_descr" fulltext (descr)
> > > "idx_item_price" btree (price)
> > >
> > >
> > > ◆このテーブルに対して次のようなSelect文を投げます。
> > > すると結果が返るのに10秒以上掛かってしまいます。
> > >
> > > SELECT price, title FROM item WHERE descr %% '価格'
> > >  ORDER BY price LIMIT 5 OFFSET 10;
> > >
> > >
> > >
> > > 【自分なりの調査結果】
> > > ◆1.通常の全文検索のみの場合では、処理結果が返るのが早いです。
> > >
> > > # explain SELECT price, title FROM item WHERE descr %% '価格' LIMIT
> 5
> > OFFSET
> > > 10;
> > > QUERY PLAN
> > >
> ----------------------------------------------------------------------
> > > ------
> > > Limit(cost=11.40..16.98 rows=5 width=94)
> > > ->Index Scan using idx_item_descr on item(cost=0.25..1029.75 rows=923
> > > width=94)
> > > Index Cond: (descr %% '価格'::text)
> > >
> > >
> > >
> > > ◆2.通常のORDER BYのみの場合でも、処理結果が返るのが早いです。
> > >
> > > # explain SELECT price, title FROM item ORDER BY price LIMIT 5 OFFSET
> 10;
> > > QUERY PLAN
> > >
> ----------------------------------------------------------------------
> > > -------
> > > Limit(cost=9.69..14.53 rows=5 width=94)
> > > ->Index Scan using idx_item_price on item(cost=0.00..893871.38
> > > rows=922639 width=94)
> > >
> > > ※この場合、ORDER BYの指定カラム「price」にBtree
> > > インデックスが設定されているのでソート処理が走ら
> > > ないので高速に結果が返ってます。
> > >
> > >
> > >
> > > ◆3.ところが1と2が組み合わさると遅くなってしまいます。
> > >
> > > # explain SELECT price, title FROM item WHERE descr %% '価格' ORDER
> BY
> > > price LIMIT 5 OFFSET 10;
> > > QUERY PLAN
> > >
> ----------------------------------------------------------------------
> > > -------
> > > Limit(cost=1052.42..1052.43 rows=5 width=94)
> > > ->Sort(cost=1052.40..1054.70 rows=923 width=94)
> > > Sort Key: price
> > >  ->Index Scan using idx_item_descr on item(cost=0.25..1029.75
> > > rows=923 width=94)
> > >  Index Cond: (descr %% '価格'::text)
> > >
> > > ※(2.の時に)走らなかったsortが走ってしまい。ここに大変時間が掛
> > > かってしまいます。enable_sortをoffにしても解決できませんでした。
> > >
> > >
> > > 以上です。解決策をご存知の方がおりましたら、教えていただきたく
> > > 何卒よろしくお願い致します。
> > >
> > > _______________________________________________
> > > Ludia-users mailing list
> > > Ludia****@lists*****
> > > http://lists.sourceforge.jp/mailman/listinfo/ludia-users
> >
> > _______________________________________________
> > Ludia-users mailing list
> > Ludia****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/ludia-users
> >
> 
> _______________________________________________
> Ludia-users mailing list
> Ludia****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ludia-users




Ludia-users メーリングリストの案内
Back to archive index