OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
tiene 3 problemas de rendimiento:
OR
está mal optimizado. Esencialmente, la tabla debe escanearse para verificar todas las filas. Es poco probable que los índices ayuden.UPPER(indexed-column)
evita el uso de un índice en esa columna. Esto se soluciona fácilmente declarando que la columna tiene unCOLLATION
eso es "insensible a mayúsculas y minúsculas", es decir, algo comoutf8_unicode_ci
; tenga en cuenta el_ci
.LIKE '%...
no puede usar un índice debido a la principal comodín.
Además, suele ser una tontería tener
32497 row(s) returned
¿Qué vas a hacer con tantas filas? El tiempo de transferencia de la red será significativo, incluso si la consulta en sí no lo es.
Para "resolver" el LIKE
, OR
y UPPER
problemas todos a la vez, recopile el texto en una sola columna en una sola tabla. Luego proporcione un FULLTEXT
índice en esa columna. El, MATCH ... AGAINST ...
se ejecutará mucho más rápido, al menos para hacer SomeName
búsqueda. (Los LEFT JOINs
son otro asunto.)