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

Back to archive index

ssenou sseno****@techn*****
2007年 12月 13日 (木) 15:14:47 JST


すいません。

クエリを間違えていました。

下記でお願いします。

SELECT * FROM table1,table2
WHERE
table1.id = table2.id AND
table1.data @@ 'TEST' or table2.data @@ 'TEST'


----- Original Message ----- 
From: <kousa****@nttda*****>
To: <ludia****@lists*****>
Sent: Thursday, December 13, 2007 2:33 PM
Subject: [Ludia-users 145] Re: 複数のテーブルに対する全文検索について


> 幸坂です。
>
>>> ・postgresql.conf にenable_seqscan = off と記述する。
>> この設定をして明示的にERRORが発生するようにしています。
> enable_seqscanとludia.enable_seqscanは別です。
> enable_seqscanをoffにすると、シーケンシャルスキャンのコストが高くなり、
> インデックススキャンが使われやすくなります。
> Ludia以外のコストも変わってしまうので注意して下さい。
> 瀬能さんが設定したludia.enable_seqscan = offは、
> シーケンシャルスキャンの時にERRORが発生しますが、
> コスト計算とは全く関係ありません。
> enable_seqscanを試してみてください。
>
>
>>>> SELECT * FROM test1,test2
>>>> WHERE table1.data @@ 'TEST' or table2.data @@ 'TEST'
> このクエリは、table1で1件以上ヒットすると、
> table2のレコードが全て結果レコードに含まれます。
> つまり、table2は全レコードがアクセスされる可能性が高いです。
> 同様に、table1も全レコードがアクセスされる可能性が高いです。
>
> 全レコードがアクセスされている場合にインデックススキャンを行うと、
> 全レコードに加えてインデックスにもアクセスする必要があり、
> ディスクアクセスが多くなってしまいます。
> そのため、今回のプランではシーケンシャルスキャンが選択されています。
>
> クエリは間違っていないですよね?
>
>> -----Original Message-----
>> From: ludia****@lists*****
>> [mailto:ludia****@lists*****] On Behalf Of ssenou
>> Sent: Thursday, December 13, 2007 11:53 AM
>> To: ludia****@lists*****
>> Subject: [Ludia-users 144] Re:複数のテーブルに対する全文検索について
>>
>> 回答ありがとうございます。
>>
>> > レコードが1行しかないため、シーケンシャルスキャンのほうが
>> > 高速と判断されています。
>>
>> データを10万行でも試してみたのですが、
>> 1行も10万行も実行計画に変化が無いので
>> サンプルを1行として質問していました。
>>
>> > ・postgresql.conf にenable_seqscan = off と記述する。
>>
>> この設定をして明示的にERRORが発生するようにしています。
>>
>> ludia1.3系や従来のコスト計算モードでも試したのですが、
>> 結果は同じでした。
>>
>> 以上よろしくお願いします。
>>
>>
>> ----- Original Message ----- 
>> From: <kousa****@nttda*****>
>> To: <ludia****@lists*****>
>> Sent: Thursday, December 13, 2007 11:40 AM
>> Subject: [Ludia-users 143] Re: 複数のテーブルに対する全文検索について
>>
>>
>> > 幸坂です。こんにちは。
>> >
>> > レコードが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 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