Schnell und ohne Aufwand die richtige Treffermenge ermitteln

Teil 4: MySQL und JOINs: Datenbank-Anfragen optimieren

SELECT t.name, w.werk, s.sponsor
FROM ( f1_team AS t INNER JOIN
f1_werk AS w ON t.motor = w.motor )
LEFT JOIN f1_sponsor AS s ON
t.name = s.name
WHERE t.m_hersteller = 'X'

Somit bleiben in der Ergebnismenge auch noch die Teams ohne Sponsoren vorhanden. Im anderen Fall haben Sie die Alternative nutzen Sie am besten einen Inner Join - dieser gibt Ihnen die gemeinsame Menge der Daten aus.

SELECT t.name, w.werk, s.sponsor
FROM ( f1_team AS t INNER JOIN
f1_werk AS w ON t.motor = w.motor )
INNER JOIN f1_sponsor AS s ON t.name
= s.name WHERE t.m_hersteller = 'X'

Als Ergebnis erhalten Sie nur noch die Teams, welche einen Sponsor besitzen.

Optimierungsmöglichkeiten

Der Grund zum Einsatz von Joins ist in der Regel der Wunsch nach einer besseren Performance bei der Datenbankabfrage. Die Datenbank baut intern eine Zwischentabelle auf und arbeitet diese ab. Sie müssen dies nicht umständlich über eigene interne Tabellen selbst erledigen.

Trotz allem gilt es einige Dinge zu beachten, damit das Ziel auch erreicht wird: Schränken Sie die Ergebnismenge am besten nicht über die Where-Klausel, sondern über die On-Bedingung ein. Bei einem Left und Right Join ignoriert MySQL die Bedingungen aus der Where-Klausel. Setzen Sie einen Join ein und anschließend einen oder mehrere Left Joins, so spielt die Reihenfolge, in welcher die Tabellen miteinander verknüpft werden, eine wesentliche Rolle. In der Abfrage

SELECT * FROM a JOIN b
LEFT JOIN c ON (c.schluessel=a.schluessel) LEFT JOIN d ON
(d.schluessel=a.schluessel)
WHERE b.schluessel=d.schluessel;

geht MySQL erst einmal alle Einträge der Tabelle b durch, da diese aufgrund des Left Joins vor d gelesen wird. Tauschen Sie im ersten Join a und b, dann wird nur die durch die WHERE-Klausel eingeschränkte Menge untersucht. Weitere Tipps zur Optimierung von Joins finden Sie in der MySQL Online-Referenz unter .

Klammern und Verschachtelungen

Bei mehrstufigen Joins macht es Unterschiede, ob Sie Klammern setzen, welche die Reihenfolge bei der Abarbeitung der Joins vorgehen oder dies dem Join Optimierer überlassen.Kapitel 7.2.10 des MySQL-Referenzhandbuchs kümmert sich im Detail um die Optimierung verschachtelter Joins.So spielt es keine Rolle, ob Sie bei einer Verschachtelung einen Cross Join oder einen Inner Join verwenden. MySQL behandelt auch in diesem Fall die beiden Operatoren gleich. Anders verhält es sich jedoch, wenn Sie die Reihenfolge der Klammern bei einer Aneinanderreihung von Left Join Verknüpfungen ändern.Zusammengefasst gibt es einige Faustregeln, die Sie beachten sollten:

Datenbank-Anfragen optimieren

© Archiv

Bei Mehrfach-Joins können Sie unterschiedliche Kombinationen von Verknüpfungen nutzen und gelangen zum gleichen Ergebnis.

• Nutzen Sie bei Ihren Tabellenverknüpfungen nur Inner Joins, so spielt die Reihenfolge der Abarbeitungen keine Rolle und Sie können getrost auf Klammern verzichten. • Nutzen Sie allerdings Left oder Right Joins, oder eine Kombination mit Inner Joins und Left beziehungsweise Right Joins, so spielen die Reihenfolge der Abarbeitung und somit auch die verwendeten Klammern eine wesentliche Rolle. Achten Sie in diesem Fall sorgfältig darauf, aus welchen Verknüpfungen Sie eine Zwischentabelle bilden möchten. • Sie haben bereits in den obigen Beispielen gesehen, welchen Einfluss die Verknüpfung und die Reihenfolge der Abarbeitung auf die Ergebnismenge haben. Weitere Hinweise und ausführliche Beispiele finden Sie auch unter .

Fazit

Der Einsatz von Joins bringt, wenn Sie die wichtigsten Grundregeln beachten, einen spürbaren Geschwindigkeitsgewinn bei den Tabellenabfragen. Beginnen Sie am besten mit einem einfachen Join zwischen zwei Tabellen und arbeiten Sie sich entsprechend an die verschachtelten, mehrstufigen Joins heran.

Achten Sie beim Aufbau Ihrer Tabellen auch darauf, dass Sie diese so gut wie möglich in normalisierter Form darstellen. Damit sparen Sie sich die redundante Datenhaltung und können optimiert auf die Inhalte der Tabellen zugreifen.

Beispiel-Tabellen

Für unsere Beispiele verwenden wir ein Datenmodell, welches die aktuellen Formel-1-Mannschaften der Saison 2009, deren Fahrer, den Lieferanten des Motors, die Gründung des Rennstalls und die Hauptsponsoren beschreibt.

Die Tabellen liegen in normalisierter Form vor:

f1_team enthält den Namen des Rennstalls, Gründungsjahr und Motor. • In f1_fahrer stehen die aktuellen Fahrer des Rennstalls. • f1_sponsor liefert die wichtigsten Sponsoren jedes einzelnen Rennstalls. • f1_werk listet alle Werke, in denen Formel-1-Motoren hergestellt werden.

Die Informationen zu den einzelnen Rennställen stammen aus diversen Internet-Artikeln und erheben keinen Anspruch auf Vollständigkeit und Richtigkeit.

Mithilfe des Scripts f1_bsp.sql (unter ) können Sie die Datenstrukturen samt Inhalt auf Ihrer Datenbank generieren lassen.

Mehr zum Thema

HTML5: Quick Reference Guide
Ratgeber: "HTML5"

Die wichtigsten Tags auf einen Blick: In unserem praktischen Arbeitsblatt finden Sie einen wertvollen Begleiter für die Umstellung Ihrer Webprojekte…
internet, webdesign, google, content, ranking, seo, suchmaschine
Ratgeber: Urheberrecht

Einzigartige Inhalte bieten Lesern Mehrwert und sind ein wichtiges Qualitätsmerkmal. Ärgerlich, wenn sich jemand durch Kopieren an fremden…
Die besten HTML5-Tipps
Neue Tipps & Tricks für blitz.io

Wer die Leistung einer Applikation ermitteln möchte, braucht keine Skripte zu schreiben, sondern kann einen der zahlreichen Online-Dienste…
image.jpg
Ratgeber: Webentwicklung

Die clientseitige Javascript-Entwicklung bietet fast keine Entwicklungsumgebungen und auch keine vernünftigen Werkzeuge zur Fehlersuche. Eine der…
internet, webdesign, meteor, webapplikationen
Ratgeber

Mit Meteor sollen Entwickler in kurzer Zeit Umgebungen für Webapplikationen erstellen können, ohne sich um lästige Details kümmern zu müssen. Wir…