Nehmen Sie den folgenden Ausdruck: FALSE AND (expression)
Wird MySQL den Ausdruck auswerten oder einfach weitergehen, sobald er FALSE
sieht?
Etwas Hintergrundkontext-- Ich wollte eine Abfrage beschleunigen, indem ich Folgendes mache:
JOIN... ON (indexed_column1=indexed_column2 AND non_indexed_column_a=non_indexed_column_b)
Hintergrundinformationen dazu, warum ich diese Abfrage durchführe finden Sie in dieser Antwort
Wenn immer non_indexed_column_a=non_indexed_column_b
ausgewertet wird, wird damit keine Zeit gespeichert.
Der MySQL-Abfrageoptimierer verwendet wann immer möglich Indizes und verwendet den restriktivsten Index, um so viele Zeilen wie möglich zu eliminieren.
Im Falle Ihrer Abfrage wird es immer die Datensätze basierend auf ersten Indexspalten filtern und dann die Datensätze von Nicht-Indexspalten filtern.
Auch vor der Ausführung der Abfrage beseitigt MySQL den Code, der immer falsch ist ( Dead Code ).
Weitere Einzelheiten finden Sie unter Ссылка
Tags und Links mysql lazy-evaluation logic boolean-logic