Wird die MySQL-Logik in der JOIN-Klausel faul / kurzgeschlossen?

8

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.

    
babonk 25.05.2012, 00:29
quelle

1 Antwort

2

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 Ссылка

    
Omesh 05.09.2012, 07:27
quelle