Where-Klausel-Bedingungsreihenfolge und MySQL-Leistung
In Szenarien, in denen eine Abfrage zahlreiche Bedingungen enthält und eine bestimmte Bedingung die Ergebnismenge erheblich einschränkt, Die Reihenfolge der Bedingungen in der WHERE-Klausel kann sich auf die MySQL-Leistung auswirken.
Bedenken Sie Folgendes Szenarien:
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh;
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar);
In der ersten Abfrage wird die Bedingung, die basierend auf dem Firmenfeld filtert, am Anfang der WHERE-Klausel platziert. Diese Bedingung schränkt effektiv die Anzahl der Zeilen ein, die für die nachfolgenden Bedingungen ausgewertet werden müssen.
In der zweiten Abfrage wird die Reihenfolge der Bedingungen umgekehrt. Die Bedingung, die basierend auf dem Firmenfeld filtert, wird nach den anderen Bedingungen ausgewertet.
Je nach Datenverteilung kann sich die Reihenfolge der Bedingungen auf die Leistung auswirken. Durch Platzieren der Bedingung, die die Ergebnismenge erheblich reduziert, am Anfang der WHERE-Klausel kann MySQL sie frühzeitig anwenden und die Auswertung nachfolgender Bedingungen für Zeilen vermeiden, die diese Bedingung nicht erfüllen.
Diese Optimierung wird als „kurz“ bezeichnet -Schaltung." Wenn die Bedingung am Anfang für eine bestimmte Zeile als „falsch“ ausgewertet wird, verwirft MySQL diese Zeile sofort, ohne die verbleibenden Bedingungen auszuwerten.
Es ist jedoch wichtig zu beachten, dass diese Optimierung nicht immer anwendbar ist. Wenn alle Bedingungen eine ähnliche Selektivität aufweisen, hat die Reihenfolge der Bedingungen möglicherweise keinen wesentlichen Einfluss auf die Leistung.
Um die optimale Reihenfolge der Bedingungen zu bestimmen, berücksichtigen Sie die folgenden Faktoren:
Das obige ist der detaillierte Inhalt vonWie wirkt sich die Bedingungsreihenfolge der WHERE-Klausel auf die MySQL-Abfrageleistung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!