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

Kann MySQL Indizes verwenden, wenn OR zwischen Bedingungen steht?

Der Abfrageplan für das OR Groß-/Kleinschreibung scheint darauf hinzudeuten, dass MySQL verwendet tatsächlich Indizes, also ist es offensichtlich möglich, zumindest in diesem Fall. Das erscheint durchaus sinnvoll, denn es gibt einen Index auf seen , und id ist die PK.

Wenn "logische und vernünftige Erklärungen" von der Realität widerlegt werden, kann man davon ausgehen, dass die Logik fehlerhaft ist oder die Erklärungen falsch oder nicht anwendbar sind. Die Leistung ist notorisch schwer vorherzusagen; Leistungstests sind dort unerlässlich, wo es auf Geschwindigkeit ankommt.

Sie sollten diejenige verwenden, die testet schneller bei einer Eingabe, die angemessen modelliert, was das Programm in der realen Verwendung sehen wird.

Beachten Sie aber auch, dass Ihre beiden Abfragen semantisch nicht äquivalent sind:if the row with id = 5204 hat auch seen = 3 dann das OR Abfrage wird es einmal zurückgeben, aber die UNION ALL Abfrage wird es zweimal zurückgeben. Es ist sinnlos, zwischen richtigem Code und falschem Code auf irgendeiner anderen Grundlage zu wählen, als der, der richtig ist.