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.