SQL-Leistung: UNION vs. OR-Vergleich
In einem kürzlich erschienenen Artikel über die Optimierung von SQL-Anweisungen wurden Leistungsprobleme bei der Verwendung von OR und UNION angesprochen. Während der Autor empfiehlt, OR durch UNION zu ersetzen, um die Leistung zu verbessern, zeigt eine genauere Betrachtung, dass nicht alle OR-Anweisungen diese Konvertierung erfordern.
Verwenden Sie OR
Der OR-Operator kombiniert Bedingungen, sodass das Ergebnis wahr ist, wenn eine der Bedingungen wahr ist. In SQL kann OR auf Spalten und Zeilen angewendet werden.
Zum Beispiel ruft die folgende Abfrage Zeilen ab, in denen das Unternehmen „bbc“ oder „itv“ lautet:
<code class="language-sql">select username from users where company = 'bbc' or company = 'itv';</code>
Diese Abfrage entspricht:
<code class="language-sql">select username from users where company IN ('bbc', 'itv');</code>
MySQL kann den Index der Unternehmensspalte effektiv nutzen, um diese Abfrage ohne Verwendung von UNION durchzuführen.
Verwenden Sie UNION
UNION kombiniert die Ergebnisse mehrerer Abfragen. Bei der Anwendung auf Zeilen ruft UNION Zeilen ab, die ein oder mehrere angegebene Kriterien erfüllen, schließt jedoch doppelte Zeilen aus.
In der folgenden Abfrage:
<code class="language-sql">select username from users where company = 'bbc' union select username from users where city = 'London';</code>
UNION ermöglicht es jeder Unterabfrage, ihren eigenen Index zu verwenden, um die Suche zu optimieren. UNION kombiniert dann die Ergebnisse der beiden Unterabfragen.
Wann OR oder UNION verwendet werden sollte
OR ist besser geeignet, wenn die folgenden Bedingungen erfüllt sind:
UNION ist effizienter, wenn die folgenden Bedingungen erfüllt sind:
SORTIEREN UND VEREINIGEN
UNION verursacht einen Sortieraufwand, um doppelte Zeilen zu entfernen. Dieser Overhead wirkt sich jedoch normalerweise nur auf einen kleinen Teil der Ergebnisse aus. Der Sortieraufwand ist normalerweise geringer als die Optimierung, die durch die Verwendung eines Unterabfrageindex erzielt wird.
Daher erfordert die Bestimmung der am besten geeigneten Methode (OR vs. UNION) eine sorgfältige Prüfung der spezifischen Daten und Suchkriterien. Ein Benchmarking beider Ansätze mit MySQL Query Analyzer kann schlüssige Erkenntnisse zur Leistung liefern.
Das obige ist der detaillierte Inhalt vonSQL-Leistung: Wann sollte ich OR vs. UNION verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!