Re: join versus Unterabfrage

Tech-Archive recommends: Fix windows errors by optimizing your registry




"Antje Kaiser" <AntjeKaiser@xxxxxxxxxxxxxxxxxxxxxxxxx> schrieb im Newsbeitrag news:086B63C6-F5EF-49DB-BAC3-DBF55C77FCA5@xxxxxxxxxxxxxxxx
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

.



Relevant Pages

  • =?Utf-8?Q?RE:_JOIN_-_Unterabfrage_=28mehr_al?= =?Utf-8?Q?s_einen_Wert_zur=C3=BCckgegeben
    ... Ein JOIN sollte sicherlich einer Unterabfrage vorgezogen werden. ... FROM dbo.Tabelle1 LEFT OUTER JOIN ... Sicht Tabelle 2 ...
    (microsoft.public.de.sqlserver)
  • Re: Transfer von Datenuntermengen
    ... View zu erstellen, diese mit mysqldump zu dumpen und bei B wieder ... Ein JOIN zwischen einer Tabelle auf A und einer Tabelle auf B ist dann ... ganz normal wie jeder andere JOIN über den DB-Server auf B möglich. ...
    (de.comp.datenbanken.mysql)
  • Re: MySQL Tabelle richtig auslesen
    ... Ja, in der Tabelle, von der du redest, gibt es die Spalte tatsächlich. ... Nimm aus der linken Tabelle den ersten Datensatz und guck in der rechten Tabelle, ob es einen Datensatz gibt, bei dem die ID mit der des linken Datensatzes übereinstimmt. ... Der wichtige Unterschied zwischen dem INNER JOIN und dem LEFT JOIN ist nun, dass der linke Datensatz nicht verworfen wird, wenn rechts kein passendes Element gefunden wird. ...
    (de.comp.datenbanken.mysql)
  • Re: DataView traversing (ADO.NET)
    ... Der View ist ein Teil der Tabelle, und hat mit dem DS so erst mal ... Ein View auf ein DS... ... Count von View die Anzahl der gefilterten Zeilen. ... Jede Tabelle hat einen DefaultView, das hat mir bisher immer gereicht. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: In welchem Datentyp erfasst Ihr Buchungsmonate?
    ... ist das mir dann etwas zuviel der Normalisierung. ... was noch alles in eine solche Tabelle reinkommt? ... Drücken Verweistabellen wirklich auf die Performance? ... INNER JOIN Perioden AS p ...
    (microsoft.public.de.sqlserver)