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
Michael Prochaska [ Mo, 16 Juli 2007 14:37 ] [ ID #1769867 ]

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
Michael Prochaska [ Mo, 16 Juli 2007 14:41 ] [ ID #1769868 ]

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
andreas.kretschmer [ Mo, 16 Juli 2007 15:04 ] [ ID #1769869 ]

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
andreas.kretschmer [ Mo, 16 Juli 2007 15:51 ] [ ID #1769870 ]
Datenbanken » gmane.comp.db.postgresql.german » JOIN Performance

Vorheriges Thema: == WöchentlicherPostgreSQL Newsletter - 15.Juli 2007
Nächstes Thema: WöchentlicherPostgreSQL Newsletter - 08. Juli2007