2017-08-16 4 views
1

grundsätzlich Sprechen, die man schneller ist:MySQL Leistung - JOIN ON vs JOIN auf mehreren Tabellen mit

SELECT FROM t1 INNER JOIN t2 INNER JOIN t3 ON t1.c = t2.c = t3.c 

vs

SELECT FROM t1 INNER JOIN t2 USING (c) INNER JOIN t3 USING (c) 
+1

Bitte lesen Sie diese http://meta.stackoverflow.com/a/271056/. Bitte beachten Sie besonders den Abschnitt zur Abfrageleistung. Dann bearbeite bitte deine Frage. Wenn Sie das nicht tun, können Sie auch fragen: * Wie lang ist eine Reise? * –

+1

Wahrscheinlich sind die Leistungen gleich (nicht sicher 100%), aber bitte beachten Sie auch, dass 'USING' und' ON' manchmal ein wenig unterschiedliche Ergebnisse ergeben : https://stackoverflow.com/questions/45605943/mysql-unable-to-get-all-columns-with-select/45606545#45606545 –

+0

Ich hätte gedacht, dass zuerst wäre ein Fehler (fehlt auf oder mit Klausel für den ersten Join) – ysth

Antwort

1

Der einfachste Weg für Sie, dies zu sagen, wäre zu schauen bei Ihrer explain plan. Wenn Sie beide betrachten, werden Sie wahrscheinlich keinen Unterschied sehen.

Das Schlüsselwort using() hier ist einfach eine Abkürzung. Es bewertet dasselbe wie Ihre andere Option und macht daher keinen Unterschied für die Leistung.

0

Der FROM-Teil einer beliebigen SQL-Anweisung wird logisch vor jedem anderen Teil der SQL-Anweisung verarbeitet, und beide Anweisungen fügen sich in den FROM-Abschnitt ein (fügen Sie die Join-Kriterien nicht einer WHERE-Klausel hinzu). Unter der Annahme, dass beide Syntax korrekt sind, ist die größere Frage, ob diese aus M: 1, M: 1-Kontext und ob es Indizes für Primär- und Fremdschlüssel gibt. Führen Sie sie dann durch einen Abfrage-Analysator, um die tatsächliche Leistung zu messen.