| From: | Thomas Markus <t(dot)markus(at)proventis(dot)net> | 
|---|---|
| To: | "Steubesand, Thomas" <T(dot)Steubesand(at)rz(dot)fh-trier(dot)de>, "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> | 
| Subject: | Re: langsame "NOT IN" Subquery | 
| Date: | 2007-07-18 13:24:45 | 
| Message-ID: | 469E149D.3050000@proventis.net | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-de-allgemein | 
Hi,
bei sowas hat sich folgendes als schneller erwiesen:
select
    id
from
    table1 a left join table2 b on a.id = b.t1_id
where
    b.id is null
Gruss
Thomas
Steubesand, Thomas schrieb:
> Hallo zusammen,
>
> folgende Aufgabenstellung:
>
> Vorhanden sind 2 Tabellen mit 200.000 (table1) und 
> 150.000 (table2) Datensätzen.
>
> Schema:
> CREATE table1
> (
> 	id		SERIAL,
> 	...
> 	PRIMARY KEY(id)
> );
>
> CREATE table2
> (
> 	...
> 	t1_id		ÎNTEGER,	-- kein foreign key!
> 	...
> );
>
> CREATE INDEX i1 ON table2(t1_id);
>
> Es sollen ALLE Datensätze aus table1 herausgefunden werden,
> die KEINEN entsprechenden Datensatz in der table2 haben:
>
> SELECT table1.id, ...
>   FROM table1 
>   WHERE 
>     ...
>     table1.id NOT IN (SELECT table2.t1_id FROM table2);
>
> Wenn ich dieses SQL-Kommando absetze, läuft es ziemlich lange -
> länger als 30 Minuten habe ich bisher noch nicht gewartet.
> Warum ist solch ein Kommando so zeitintensiv unter PostgreSQL 8.1.2 
> (Unix) und unter 8.2.3 (XP)?
>
> Ein 
>
> SELECT table1.id FROM table1 
> EXCEPT
> SELECT table2.t1_id FROM table2;
>
> benötigt 5 bis 6 Sekunden.
>
> Vielen Dank schon mal für Euere Hilfe
>
> Thomas
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings
>   
-- 
Thomas Markus
Tel:    +49 30 29 36 399 - 22
Fax:    +49 30 29 36 399 - 50
Mail:   t(dot)markus(at)proventis(dot)net
Web:    http://www.proventis.net
Web:    http://www.blue-ant.de
proventis GmbH
Zimmerstraße 79-80
10117 Berlin
Geschäftsführer: Norman Frischmuth
Sitz: Berlin
Handelsregister: AG Berlin-Charlottenburg, HR 82917
We support your project business!
| Attachment | Content-Type | Size | 
|---|---|---|
| t.markus.vcf | text/x-vcard | 255 bytes | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Bernd Helmle | 2007-07-18 14:24:11 | Re: Komplette Datenbank auf anderen Rechner | 
| Previous Message | A. Kretschmer | 2007-07-18 13:21:16 | Re: langsame "NOT IN" Subquery |