OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
ha 3 problemi di prestazioni:
OR
è scarsamente ottimizzato. In sostanza, la tabella deve essere scansionata per controllare tutte le righe. È improbabile che gli indici aiutino.UPPER(indexed-column)
impedisce l'utilizzo di un indice su quella colonna. Questo è facilmente aggirabile dichiarando che quella colonna ha unCOLLATION
questo è "senza distinzione tra maiuscole e minuscole" -- cioè qualcosa comeutf8_unicode_ci
; nota il_ci
.LIKE '%...
non è possibile utilizzare un indice a causa del principale carattere jolly.
Inoltre, di solito è sciocco avere
32497 row(s) returned
Cosa farai con così tante righe? Il tempo di trasferimento della rete sarà significativo, anche se la query stessa non lo è.
Per "risolvere" il LIKE
, OR
e UPPER
problemi tutti in una volta, raccogliere il testo insieme in un'unica colonna in un'unica tabella. Quindi fornisci un FULLTEXT
indice su quella colonna. Il, MATCH ... AGAINST ...
funzionerà molto più velocemente, almeno per l'esecuzione di SomeName
ricerca. (Il LEFT JOINs
sono un'altra questione.)