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 >