[Ludia-users 178] Re: NOT検索について

Back to archive index

kousa****@nttda***** kousa****@nttda*****
2008年 1月 16日 (水) 13:46:34 JST


幸坂です。こんにちは。

>> SELECT * FROM tab WHERE title @@ 'A' AND NOT(data @@ 'XXX');
このクエリの場合、title列をインデックススキャンした後、
data列でフィルタ(シーケンシャルスキャン)するプランになるかと思います。
一度インデックススキャンしているので、あまり遅くないと思いますが
いかがでしょうか?

どうしてもseq scanを避けたい場合、以下のクエリでどうでしょう?
 SELECT id FROM tab WHERE title @@ 'A'
 EXCEPT
 SELECT id FROM tab WHERE data @@ 'XXX';
EXCEPTで行の比較をしているため、逆に遅くなる可能性があります・・・。

もしくは、以下のように副問い合わせを用いた方法もあります。
 SELECT * FROM tab WHERE title @@ 'A' AND id NOT IN
 (SELECT id FROM tab WHERE data @@ 'XXX');

いろいろ試してみてください。

> -----Original Message-----
> From: ludia****@lists***** 
> [mailto:ludia****@lists*****] On Behalf Of ssenou
> Sent: Thursday, January 10, 2008 3:00 PM
> To: ludia****@lists*****
> Subject: [Ludia-users 174] Re: NOT検索について
> 
> 瀬能です。
> 回答ありがとうございます。
> 
> NOT(data @@ 'XXX')で
> 期待して検索結果は得られたのですが、
> どうもSeq Scanになってしまうようです。
> 
> ludiaのINDEXを使う形でSQLを組むとすると
> 何かいい方法はありますか?
> 
> 以上よろしくお願いします。
> 
> ----- Original Message ----- 
> From: <kousa****@nttda*****>
> To: <ludia****@lists*****>
> Sent: Thursday, January 10, 2008 1:59 PM
> Subject: [Ludia-users 173] Re: NOT検索について
> 
> 
> > 幸坂です。こんにちは。
> >
> > SELECT * FROM tab WHERE title @@ 'A' AND NOT(data @@ 'XXX');
> > でいかがでしょうか?
> >
> >> 最初「-」を利用して検索すれば出来ると思い、
> >> data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまった
の
> > で…
> > +や-を最初に持ってくることはできません。
> > 指定しても無視されます。
> >
> >> -----Original Message-----
> >> From: ludia****@lists*****
> >> [mailto:ludia****@lists*****] On 
> Behalf Of ssenou
> >> Sent: Wednesday, January 09, 2008 5:11 PM
> >> To: ludia****@lists*****
> >> Subject: [Ludia-users 172] NOT検索について
> >>
> >> 瀬能です。
> >> お世話になります。
> >>
> >> ■環境
> >> Redhat Enterprise Linux 4 U5
> >> ludia 1.4.0 (mecab-0.96 ipadic-2.7.0 senna-1.0.9
> >> postgresql 8.2.4
> >>
> >> ■DB
> >> table : id int4(主キー),title varchar,data text
> >> index : fulltextb(data)
> >>
> >> ■データ
> >> id=1 title=A data=XYZ
> >> id=2 title=A data=XXX
> >> id=2 title=B data=XXX
> >>
> >> ■現象
> >>
> >> titleが「A」且つ dataが「XXX」
> >> では無いレコードを検索したいという場合は
> >> どういった方法がありますでしょうか?
> >>
> >> 最初「-」を利用して検索すれば出来ると思い、
> >> data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまった
の
> > で…
> >>
> >>
> >> 以上、よろしくお願いします。
> >>
> >> _______________________________________________
> >> 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