[Ludia-users 143] Re: 複数のテーブルに対する全文検索について

Back to archive index

kousa****@nttda***** kousa****@nttda*****
2007年 12月 13日 (木) 11:40:25 JST


幸坂です。こんにちは。

レコードが1行しかないため、シーケンシャルスキャンのほうが
高速と判断されています。

・レコード数を増やす。
・postgresql.conf にenable_seqscan = off と記述する。

などの方法を用いれば、インデックススキャンが利用されるはずです。

> -----Original Message-----
> From: ludia****@lists***** 
> [mailto:ludia****@lists*****] On Behalf Of ssenou
> Sent: Thursday, December 13, 2007 11:27 AM
> To: ludia****@lists*****
> Subject: [Ludia-users 142]複数のテーブルに対する全文検索について
> 
> 瀬能です。
> お世話になっています。
> 
> 質問があるのですが、
> 複数のテーブル(text型カラム)に対する複数の@@検索を実行すると
> 必ずシーケンシャルスキャンになってしまうのですが、
> 複数のテーブル(text型カラム)に対する複数の@@検索は想定していない仕様です
か?
> (SQL文で対応出来ない事もないですが、できるだけ自由な記述をしたいと思ってい
るので…)
> また、回避方法などあれば教えてください。
> 
> 以上よろしくお願いします。
> 
> ■環境
> Redhat Enterprise Linux 4 U5
> ludia 1.4.0 (mecab-0.96 ipadic-2.7.0 senna-1.0.9
> postgresql 8.2.4
> 
> ■設定
> postgres.conf
> ・ludia.max_n_sort_result = 100000
> ・ludia.enable_seqscan = off
> ・ludia_sen_index_flags = 31
> ・ludia.max_n_index_cache = 16
> ・ludia.initial_n_segments = 2048
> ・ludia.usegenericcost = on or off共に
> 
> ■DB
> ・table1(構成)  : id(key) int4,data text
> ・table2(構成)  : id(key) int4,data text
> ・table1(DATA)  : id = 1,data = "TEST"
> ・table2(DATA)  : id = 1,data = "TEST"
> ・table1(INDEX) : fulltextb
> ・table2(INDEX) : fulltextb
> 
> ■現象
> SELECT * FROM test1,test2
> WHERE table1.data @@ 'TEST' or table2.data @@ 'TEST'
> 
> と実行すると
> 
> "Nested Loop  (cost=0.00..2.04 rows=1 width=24)"
> "  Join Filter: ((table1.data @@ 'TEST'::text) OR (table2.data @@ 
> 'TEST'::text))"
> "  ->  Seq Scan on table1  (cost=0.00..1.01 rows=1 width=12)"
> "  ->  Seq Scan on table2  (cost=0.00..1.01 rows=1 width=12)"
> 
> とシーケンシャルスキャンになってしまいます。 
> 
> _______________________________________________
> Ludia-users mailing list
> Ludia****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ludia-users
> 




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