motoi sugito
m.sug****@gmail*****
2008年 4月 10日 (木) 20:53:31 JST
お世話になっております。杉藤です。 説明不足でした。申し訳ござません。 > 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 >