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

Verwenden Sie eine Union oder einen Join - was schneller ist

Union ist schneller, da es einfach die erste SELECT-Anweisung übergibt und dann die zweite SELECT-Anweisung parst und die Ergebnisse am Ende der Ausgabetabelle hinzufügt.

Der Join durchläuft jede Zeile beider Tabellen, findet Übereinstimmungen in der anderen Tabelle und erfordert daher viel mehr Verarbeitung, da für jede einzelne Zeile nach übereinstimmenden Zeilen gesucht werden muss.

BEARBEITEN

Mit Union meine ich Union All, da es für das, was Sie erreichen wollten, angemessen erschien. Obwohl eine normale Union im Allgemeinen schneller ist als Join.

EDIT 2 (Antwort auf den Kommentar von @seebiscuit)

Ich stimme ihm nicht zu. Technisch gesehen ist ein "JOIN" immer noch teurer als eine reine Verkettung, egal wie gut Ihr Join ist. Ich habe in meinem Blog codePERF[dot]net einen Blogbeitrag erstellt, um dies zu beweisen . Praktisch gesehen dienen sie zwei völlig unterschiedlichen Zwecken, und es ist wichtiger, sicherzustellen, dass Ihre Indexierung richtig ist, und das richtige Tool für den Job zu verwenden.

Technisch denke ich, dass es mit den folgenden 2 Ausführungsplänen aus meinem Blog-Beitrag zusammengefasst werden kann:

UNION ALL Ausführungsplan

JOIN Ausführungsplan

Praktische Ergebnisse

Praktisch gesehen ist der Unterschied bei einer Clustered-Index-Suche vernachlässigbar: