join versus Unterabfrage

25/10/2007 - 13:25 von Antje Kaiser | Report spam
Hallo zusammen,
ich habe mal eine prinzipielle Frage:
Ist es grundsàtzlich immer bessser (schneller) joins zu machen? Meine Frage
bezieht sich auf wirklich komplexe Sachen. Wenn ich zum Beispiel in einer
View einen Wert brauche, der in einer, über 5 Beziehungen zu erreichenden,
Tabelle steht, mich die Zwischentabellen aber garnicht interessieren ist dann
der Join immer noch schneller als wenn ich eine Unterabfrage mache (dabei
meine ich natürlich Unterabfrage genau so wie die Beziehungen voll über die
Primàrschlüssel). Jedesmal, wenn ich eine komplexe View erstelle (bis zu 20
einbezogenen Tabellen) stell ich mir diese Frage wieder. Ähnlich ist es, wenn
ich aus einer Tabelle verschiedene Sàtze in die View haben will, die gleiche
Tabelle also über mehrere Aliase mehrfach mit "einbeziehe". Die Verlockung in
solchen Fàllen Unterabfragen zu machen ist schon sehr groß. Wie seht Ihr das,
was würdet Ihr empfehlen.


Gruß
Antje
 

Lesen sie die antworten

#1 Gregor Stefka
25/10/2007 - 19:21 | Warnen spam
"Antje Kaiser" schrieb im
Newsbeitrag news:
Hallo zusammen,
ich habe mal eine prinzipielle Frage:
Ist es grundsàtzlich immer bessser (schneller) joins zu machen? Meine
Frage
bezieht sich auf wirklich komplexe Sachen. Wenn ich zum Beispiel in einer
View einen Wert brauche, der in einer, über 5 Beziehungen zu erreichenden,
Tabelle steht, mich die Zwischentabellen aber garnicht interessieren ist
dann
der Join immer noch schneller als wenn ich eine Unterabfrage mache (dabei
meine ich natürlich Unterabfrage genau so wie die Beziehungen voll über
die
Primàrschlüssel). Jedesmal, wenn ich eine komplexe View erstelle (bis zu
20
einbezogenen Tabellen) stell ich mir diese Frage wieder. Ähnlich ist es,
wenn
ich aus einer Tabelle verschiedene Sàtze in die View haben will, die
gleiche
Tabelle also über mehrere Aliase mehrfach mit "einbeziehe". Die Verlockung
in
solchen Fàllen Unterabfragen zu machen ist schon sehr groß. Wie seht Ihr
das,
was würdet Ihr empfehlen.


Gruß
Antje




Es gibt darauf keine pauschale Antwort. Wenn du aber Szenarien wie
beschrieben abbilden willst, solltest du neben View mit join und subselect
auch Stored Procs ins Auge fassen.
Damit hast du eine Möglichkeit (die ggf. auch schneller als Join oder
Subselect ist) das Statement aufzuteilen.
In deinem Szenario wo man "über 5 Tabellen hinweg aus Tabelle 6 holen muss",
macht z.B. folgendes Sinn:

hole "DatenXY" anhand von Daten1:

select ID= @nID2 from tbl2 where x=Daten1
select ID= @nID3 from tbl3 where tbl2ID=nID2
select ID= @nID4 from tbl4 where tbl2ID=nID3
usw...

Am Ende kannst du dann die eigentliche Abfrage machen mit select
feld1,feld2,feld from tbl6 where xy=DatenXY. Das Resultset bestimmt nun die
joins und nicht irgendwelche Abhàngigkeiten zwischen 5 Tabellen.



hth
Gregor Stefka

Ähnliche fragen