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