OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
hat 3 Leistungsprobleme:
OR
ist schlecht optimiert. Im Wesentlichen muss die Tabelle gescannt werden, um alle Zeilen zu überprüfen. Indizes sind wahrscheinlich nicht hilfreich.UPPER(indexed-column)
verhindert die Verwendung eines Indexes für diese Spalte. Dies kann leicht umgangen werden, indem diese Spalte alsCOLLATION
deklariert wird das ist „Groß-/Kleinschreibung egal“ – also so etwas wieutf8_unicode_ci
; beachten Sie das_ci
.LIKE '%...
kann wegen des Führenden keinen Index verwenden Platzhalter.
Außerdem ist es normalerweise töricht, es zu haben
32497 row(s) returned
Was willst du mit so vielen Zeilen machen? Die Netzwerkübertragungszeit wird erheblich sein, auch wenn die Abfrage selbst dies nicht ist.
Um das LIKE
zu "lösen". , OR
, und UPPER
Probleme auf einmal, sammeln Sie den Text in einer einzigen Spalte in einer einzigen Tabelle zusammen. Geben Sie dann einen FULLTEXT
ein Index für diese Spalte. Das, MATCH ... AGAINST ...
wird viel schneller laufen - zumindest für SomeName
Suche. (Die LEFT JOINs
sind eine andere Sache.)