JOIN Performance
hallo,
ich verwende postgresql 8.2 und habe folgende tabellenstruktur:
subjekte:
subjektid,
strasse
/ \
/ \
personen: firmen:
personenid,
name
/ \
/ \
kunden: personal:
kundenid,
geb_datum
bei den subjekten ist die id vom typ serial, die anderen tabellen werden
applikationsseitig 1:1 verknüpft befüllt.
um dann die virtuelle tabelle kunden zu bekommen, brauche ich also 2
verschachtelte inner joins:
SELECT * FROM (kunden INNER JOIN personen ON kundenid =3D personenid WHER=
E
name=3D'rudi') INNER JOIN subjekte ON personenid=3Dsubjektid;
je nachdem nach was dann gesucht werden soll kann sich natürlich auch d=
ie
reihenfolge ändern.
soweit ich weiß gibt es für JOINS ja mehrere möglichkeiten (z.B. nu=
r mit
WHERE)...passt mein ansatz, oder gibt es bez. performance einen besseren
ansatz?
mfg,
michael
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
http://archives.postgresql.org
Re: JOIN Performance
jetzt hab ich noch was vergessen :-)
ist es besser gleich alle felder mit * zu selektieren wenn man sowieso
fast alle braucht, oder bringt jedes feld das man weniger selektiert mehr
performance?
mfg,
michael
> hallo,
>
> ich verwende postgresql 8.2 und habe folgende tabellenstruktur:
>
> subjekte:
> subjektid,
> strasse
> / \
> / \
> personen: firmen:
> personenid,
> name
> / \
> / \
> kunden: personal:
> kundenid,
> geb_datum
>
>
> bei den subjekten ist die id vom typ serial, die anderen tabellen werde=
n
> applikationsseitig 1:1 verknüpft befüllt.
>
> um dann die virtuelle tabelle kunden zu bekommen, brauche ich also 2
> verschachtelte inner joins:
>
> SELECT * FROM (kunden INNER JOIN personen ON kundenid =3D personenid WH=
ERE
> name=3D'rudi') INNER JOIN subjekte ON personenid=3Dsubjektid;
>
> je nachdem nach was dann gesucht werden soll kann sich natürlich auch=
die
> reihenfolge ändern.
>
>
> soweit ich weiß gibt es für JOINS ja mehrere möglichkeiten (z.B. =
nur mit
> WHERE)...passt mein ansatz, oder gibt es bez. performance einen bessere=
n
> ansatz?
>
> mfg,
> michael
>
> ---------------------------(end of broadcast)--------------------------=
-
> TIP 4: Have you searched our list archives?
>
> http://archives.postgresql.org
>
>
---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo [at] postgresql.org so that your
message can get through to the mailing list cleanly
Re: JOIN Performance
am Mon, dem 16.07.2007, um 14:41:41 +0200 mailte Michael Prochaska folge=
ndes:
> jetzt hab ich noch was vergessen :-)
>
> ist es besser gleich alle felder mit * zu selektieren wenn man sowieso
> fast alle braucht, oder bringt jedes feld das man weniger selektiert me=
hr
> performance?
zweiteres. Wenn Du mit * arbeitest und eines Tages die Tabelle um ein
BLOB mit 10 GByte Daten erweiterst, welches Du aber nicht brauchst im
Resultat einer speziellen Abfrage, wirst Du das merken...
> > um dann die virtuelle tabelle kunden zu bekommen, brauche ich also 2
> > verschachtelte inner joins:
> >
> > SELECT * FROM (kunden INNER JOIN personen ON kundenid =3D personenid =
WHERE
> > name=3D'rudi') INNER JOIN subjekte ON personenid=3Dsubjektid;
Du willst, um eine 'virtuelle tabelle' kunden zu bekommen, diese selbst
abfragen? Versteh ich grad nicht...
Davon abgesehen scheint mir die Syntax falsch zu sein.
select * from (select * from kunden inner join personen
on(kunden.kundenid =3D personen.personenid) WHERE name=3D'rudi')foo INNER
JOIN subjecte ON personenid=3Dsubjektid;
> > soweit ich weiß gibt es für JOINS ja mehrere möglichkeiten (z.B=
.. nur mit
> > WHERE)...passt mein ansatz, oder gibt es bez. performance einen besse=
ren
> > ansatz?
Die Antwort liefert Dir EXPLAIN.
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
http://archives.postgresql.org
Re: JOIN Performance
am Mon, dem 16.07.2007, um 15:38:38 +0200 mailte Michael Prochaska folge=
ndes:
> sorry, wenn ich das EXPLAIN vor dem antworten gelesen hätte ich mir d=
as
> sparen können :-)
Tja, /OHNE/ TOFU wär das nicht passiert...
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend