From: | Mike Mascari <mascarm(at)mascari(dot)com> |
---|---|
To: | kaiq(at)realtyideas(dot)com |
Cc: | Adriaan Joubert <a(dot)joubert(at)albourne(dot)com>, Satyajeet Seth <csa98016(at)cse(dot)iitd(dot)ernet(dot)in>, pgsql-general(at)postgreSQL(dot)org |
Subject: | Re: [GENERAL] Except operation |
Date: | 1999-12-02 20:02:49 |
Message-ID: | 3846D069.79EF1543@mascari.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
kaiq(at)realtyideas(dot)com wrote:
> how about I'm a sql92 lover? :-)
>
> the idea is to use index. but the engine only use index when it sees
> "where". so, how about add "where w.tid = w.tid" to the first (or
> both) select on the two sides of the except?
>
> not tested. if work, please let us know, thanks.
>
> Kai
That's not the problem. The problem is that the INTERSECT/EXCEPT code
uses the query rewriter to automatically rewrite the query to something
like:
SELECT * FROM webdata w
WHERE (<webdata.fieldlist>) NOT IN (
SELECT * FROM webdata1);
and 'IN' clauses in PostgreSQL can't use indices. The result is always a
sequential scan on the IN values. INTERSECT/EXCEPT should have been
written to rewrite the query using correlated subqueries and the EXISTS
test, as Adriaan suggests below. In fact, one of the possible solutions
for the un-usability of IN clauses is to have PostgreSQL rewrite those as
EXISTS....but no one's done that yet.
Mike
>
> On Thu, 2 Dec 1999, Adriaan Joubert wrote:
>
> > Satyajeet Seth wrote:
> > >
> > > Hi
> > > The query:
> > > select * from webdata except select * from webdata1;
> > > takes abysmally long .How can I optimise it?
> > > The particulars are:
> >
> > You could try
> >
> > select * from webdata w
> > where not exists
> > (select * from webdata1 w1
> > where w1.tid=w.tid
> > ...
> > )
> >
> > If you have the correct indexes on webdata1 this can be quite fast.
> >
> > Adriaan
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 1999-12-02 20:23:58 | Re: [GENERAL] Date & Time |
Previous Message | kaiq | 1999-12-02 19:57:44 | Re: [GENERAL] Date & Time |