SQL-Leistung: Die Kontroverse zwischen UNION und OR
Allein der Gedanke, dass das Ersetzen von OR-Anweisungen durch UNIONs die SQL-Leistung verbessert, ist eine zu starke Vereinfachung. Das Verständnis der Nuancen ihrer Verwendung kann jedoch zu erheblichen Leistungsverbesserungen führen.
Verstehen Sie die Unterschiede
OR führt eine einzelne Abfrage aus und ruft Zeilen ab, die eine der beiden Bedingungen erfüllen. UNION hingegen führt zwei separate Abfragen aus und kombiniert deren Ergebnisse. Diese Unterscheidung wird wichtig, wenn das OR mehrere Spalten umfasst.
Betrachten Sie die folgende hypothetische Abfrage:
<code class="language-sql">select username from users where company = 'bbc' or city = 'London';</code>
Wenn sowohl die Unternehmens- als auch die Stadtspalte Indizes haben, muss MySQL einen Index auswählen. Dies kann zu einem vollständigen Tabellenscan einer anderen Spalte führen.
UNION als Lösung
UNION löst dieses Problem, indem es die Abfrage abtrennt:
<code class="language-sql">select username from users where company = 'bbc' union select username from users where city = 'London';</code>
Jede Unterabfrage nutzt effektiv ihren jeweiligen Index und das Endergebnis ist die Vereinigung der beiden Mengen.
Hinweise zur Sortierung
UNION erfordert eine Sortierung, um Duplikate im Ergebnissatz zu entfernen. Da sich UNION jedoch auf eine kleinere Anzahl von Zeilen konzentriert, ist der Overhead normalerweise vernachlässigbar. In den meisten Fällen, in denen sich eine WHERE-Klausel auf eine Tabelle auswirkt, können die Kosten für einen vollständigen Tabellenscan die Kosten für eine UNION-Sortierung übersteigen.
Fazit
UNION ist nicht unbedingt besser als OR. Es kann jedoch die Leistung optimieren, wenn OR Prädikate für Spalten mit widersprüchlichen Indizes umfasst. Das Verständnis dieser Nuancen ist für das Schreiben effizienter SQL-Abfragen von entscheidender Bedeutung.
Das obige ist der detaillierte Inhalt vonSQL-Leistung: Wann ist UNION besser als OR?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!