Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Left JOIN schneller oder Inner Join schneller?

Es hängt davon ab, ob; Führen Sie sie beide aus, um es herauszufinden. Führen Sie dann eine 'Erklären-Auswahl' für eine Erklärung aus.

Der tatsächliche Leistungsunterschied kann von „praktisch nicht vorhanden“ bis „ziemlich signifikant“ reichen, je nachdem, wie viele Zeilen in A mit der ID='12345' keine übereinstimmenden Datensätze in B und C haben.

Aktualisieren (basierend auf geposteten Abfrageplänen)

Wenn Sie INNER JOIN verwenden, spielt es keine Rolle (in Bezug auf die Ergebnisse, nicht in Bezug auf die Leistung), mit welcher Tabelle Sie beginnen, sodass der Optimierer versucht, diejenige auszuwählen, die seiner Meinung nach am besten funktioniert. Anscheinend haben Sie Indizes für alle geeigneten PK/FK-Spalten und Sie haben entweder keinen Index für friend_events.userid oder es gibt zu viele Datensätze mit userid = '13006' und es wird nicht verwendet; So oder so wählt der Optimierer die Tabelle mit weniger Zeilen als "Basis" - in diesem Fall ist es zcms_users .

Wenn Sie LEFT JOIN verwenden, macht es egal (was die Ergebnisse angeht), mit welcher Tabelle ich anfangen soll; also friend_events wird abgeholt. Nun warum es dauert weniger Zeit, da bin ich mir nicht ganz sicher; Ich vermute friend_events.userid Zustand hilft. Wenn Sie einen Index hinzufügen würden (ist es wirklich varchar, übrigens nicht numerisch?) könnte sich Ihr INNER JOIN auch anders verhalten (und schneller werden).