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

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".