it-swarm.com.de

MySQL: Welcher Join ist besser zwischen linkem äußeren Join und innerem Join?

Welcher Join ist besser geeignet, wenn alle das gleiche Ergebnis liefern? Zum Beispiel habe ich zwei Tabellen employees(emp_id,name, address, designation, age, sex) und work_log(emp_id,date,hours_wored). Um einige spezifische Ergebnisse zu erhalten, müssen beide inner join und left join ergibt das gleiche Ergebnis. Ich habe jedoch noch einige Zweifel, die sich nicht nur auf diese Frage beschränken.

  • welcher Join ist effizienter, welcher sollte bei gleichen Ergebniswerten bevorzugt werden?
  • Welche anderen Faktoren müssen zum Zeitpunkt der Bewerbung berücksichtigt werden?
  • Gibt es eine Beziehung zwischen innerem Join und Cross-Join?
10
ursitesion

Es gibt keinen "besseren" oder "schlechteren" Join-Typ. Sie haben unterschiedliche Bedeutungen und müssen abhängig davon verwendet werden.

In Ihrem Fall haben Sie wahrscheinlich keine Mitarbeiter ohne work_log (keine Zeilen in dieser Tabelle), sodass LEFT JOIN Und JOIN in den Ergebnissen gleichwertig sind. Wenn Sie jedoch so etwas hätten (ein neuer Mitarbeiter ohne registriertes Arbeitsprotokoll), würde ein JOIN diesen Mitarbeiter weglassen, während ein linker Join (dessen erste Tabelle Mitarbeiter ist) alle anzeigen würde und Nullen aktiviert die Felder aus work_log, wenn keine Übereinstimmungen vorhanden sind.

Visual explanation of JOIN types

Auch hier spielt die Leistung eine untergeordnete Rolle bei der Abfrage der Korrektheit. Einige Leute sagen, dass Sie LEFT JOIN S nicht verwenden sollten. Es ist richtig, dass ein LEFT JOIN den Optimierer zwingt, die Abfrage in einer bestimmten Reihenfolge auszuführen, wodurch in einigen Fällen einige Optimierungen (Tabellenumordnung) verhindert werden. Hier ist ein Beispiel . Aber Sie sollten nicht eins über das andere wählen, wenn Korrektheit/Bedeutung geopfert wird, da ein INNER JOIN nicht von Natur aus schlechter ist. Die restlichen üblichen Optimierungen gelten wie gewohnt.

Verwenden Sie zusammenfassend nicht LEFT JOIN, Wenn Sie wirklich INNER JOIN Meinen.

In MySQL CROSS JOIN Sind INNER JOIN Und JOIN identisch. Im Standard und semantisch ist ein CROSS JOIN Eine INNER JOIN Ohne ON -Klausel, sodass Sie jede Kombination von Zeilen zwischen Tabellen erhalten.

Sie haben Beispiele für alle semantischen Join-Typen auf Wikipedia . In der Praxis schreiben wir in MySQL normalerweise nur JOIN und LEFT JOIN.

14
jynus

Welcher Join ist besser, wenn alle das gleiche Ergebnis liefern?

Ich füge die vorherige Antwort hinzu, soweit ich weiß, ist MySQL optimiert, um die gleiche Leistung zu erzielen.

Bei guten Indizes zum Beispiel JOIN vs LEFT JOIN + WHERE Klausel zum Filtern ist dasselbe. Optimierung vs Human Reading ist bei großen Abfragen mit vielen Verknüpfungen sinnvoll.

Die Verwendung guter Indizes und Caches ist wichtiger.

Eine gute Erklärung des Optimierungsprozesses finden Sie hier:

Der Abfrageoptimierungsprozess : Eine Abfrage kann häufig auf viele verschiedene Arten ausgeführt werden und das gleiche Ergebnis liefern. Die Aufgabe des Optimierers besteht darin, die beste Option zu finden.

0
Shim-Sao