OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
har 3 ydeevneproblemer:
ORer dårligt optimeret. I det væsentlige skal tabellen scannes for at kontrollere alle rækker. Indekser hjælper næppe.UPPER(indexed-column)forhindrer brug af et indeks på den kolonne. Dette er nemt at omgå at erklære den kolonne for at have enCOLLATIONdet er "case-insensitive" -- det vil sige noget somutf8_unicode_ci; bemærk_ci.LIKE '%...kan ikke bruge et indeks på grund af førende jokertegn.
Derudover er det normalt tåbeligt at have
32497 row(s) returned
Hvad skal du med så mange rækker? Netværksoverførselstiden vil være betydelig, selvom selve forespørgslen ikke er det.
For at "løse" LIKE , OR og UPPER problemer på én gang, samle teksten sammen i en enkelt kolonne i en enkelt tabel. Angiv derefter en FULLTEXT indeks på den kolonne. Den, MATCH ... AGAINST ... vil køre meget hurtigere -- i det mindste for at udføre SomeName Søg. (De LEFT JOINs er en anden sag.)