MichaelR: SQL : SELECT + LEFT JOIN

Hallo,

zur Ausgabe von Daten aus insgesamt 7 Tabellen hab ich einen SELECT-Query mit 6 LEFT JOIN Ergänzungen.

Zu Testzwecken habe ich eine Tabelle, die in einem LEFT JOIN enthalten ist, mit insgesamt 75.000 Datensätzen gefüllt.

Der so konstruierte SELECT-Query soll ein Ergebnis zurückliefern, das identisch ist, egal ob ich diese 75.000 Test-Datensätze habe oder nicht, d. h. diese Test-Datensätze fallen durch die ON-Bedingungen heraus.

Allerdings hab ich jetzt festgestellt, dass die Webseite enorm und zwar wirklich enorm langsam wird bzw. letztlich "völlig den Geist aufgibt".

Daher meine Frage: Ist die Reihenfolge in einer ON-Bedingung wichtig oder kann ich die dort angegebenen Bedingungen in beliebiger Reihenfolge angeben? Oder -- so wie ich das momentan sehe -- wird die Ergebnismenge zuerst aus der linken Tabelle und der mit JOIN verbundenen Tabelle und der ersten Bedingung gebildet, danach dann gefiltert nach der zweiten ON-Bedingung, dann die dritte ON-Bedingung etc.??

Grüße,
Michael

  1. echo $begrüßung;

    Ist die Reihenfolge in einer ON-Bedingung wichtig oder kann ich die dort angegebenen Bedingungen in beliebiger Reihenfolge angeben? [...]

    SQL-Server kennen im Allgemeinen eine Menge Optimierungsmöglichkeiten. Selbst Datenbankspezialisten (die auf der Anwenderseite; Entwickler sollten sich da schon etwas besser auskennen) kennen nicht unbedingt den genauen Ablauf, der bei einer Query stattfindet. Doch es gibt Hilfsmittel, mit denen man sich Details der Ausführung anzeigen lassen kann. MySQL kennt beispielsweise EXPLAIN. Frage also zunächst EXPLAIN. Dann empfiehlt es sich immer, bei solchen Fragen das Datenbankdesign und die Abfrage zu präsentieren, damit man nicht nur allgmeine Schüsse ins Blaue abgeben kann, wie zum Beispiel: Hast du Indexe definiert? Und auch bei der Beachtung dieses Tipp kann man Fehler begehen, wenn man sich nicht mit EXPLAIN anschaut, ob und welche Indexe überhaupt verwendet wurden. Überflüssige Indexe werden zwar bei der Query ignoriert, müssen aber bei Datenänderungen mitgepflegt werden.

    echo "$verabschiedung $name";