From: | Jens Hartwig <jhartwig(at)debis(dot)com> |
---|---|
To: | PostgreSQL SQL <pgsql-sql(at)postgresql(dot)org> |
Subject: | Strange Execution-Plan for NOT EXISTS |
Date: | 2000-12-28 10:55:02 |
Message-ID: | 3A4B1C06.2A5C6C94@debis.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hello all,
I tried (just for academical fun) to resolve ID´s which are not used
anymore, e.g.:
ID NAME
-- + ------------------
1 | NOBODY
2 | ANYBODY
4 | EVERYBODY
Now I want to get "3" as the next usable ID. I really know that this is
kind of bad style but a friend of mine asked me if I had a solution for
this problem.
My solution would be the following statement:
--------------------------------
select (min(id) + 1)
from t_dummy d1
where not exists (
select id
from t_dummy d2
where d2.id = (d1.id + 1)
);
--------------------------------
The explain plan for this statement, tested against a real table with
about 8,000 records in a freshly vacuumed database, looks like the
following:
Aggregate (cost=2924207.88..2924207.88 rows=1 width=12)
-> Seq Scan on t_dummy d1 (cost=0.00..2924207.88 rows=1 width=12)
SubPlan
-> Seq Scan on t_dummy d2 (cost=0.00..331.36 rows=1 width=12
)
Why that? Wouldn´t it be possible to simple use the primary key index in
the sub-query and exit from the outer query at the first occurence of an
ID which has no following entry? Any ideas from anyone? Am I wrong?
Best regards, Jens
=============================================
Jens Hartwig
---------------------------------------------
debis Systemhaus GEI mbH
10875 Berlin
Tel. : +49 (0)30 2554-3282
Fax : +49 (0)30 2554-3187
Mobil : +49 (0)170 167-2648
E-Mail : jhartwig(at)debis(dot)com
=============================================
From | Date | Subject | |
---|---|---|---|
Next Message | Brian C. Doyle | 2000-12-28 12:19:15 | Re: Query Help |
Previous Message | patrick.jacquot | 2000-12-28 09:54:43 | Re: Query Help |