OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
heeft 3 prestatieproblemen:
ORis slecht geoptimaliseerd. In wezen moet de tabel worden gescand om alle rijen te controleren. Indexen zullen waarschijnlijk niet helpen.UPPER(indexed-column)voorkomt het gebruik van een index op die kolom. Dit is gemakkelijk te omzeilen door die kolom een COLLATIONte geven dat is "hoofdlettergevoelig" -- dat wil zeggen, zoiets alsutf8_unicode_ci; let op de_ci.LIKE '%...kan geen index gebruiken vanwege de voorloop jokerteken.
Bovendien is het meestal dwaas om
32497 row(s) returned
Wat ga je doen met zoveel rijen? De netwerkoverdrachtstijd zal aanzienlijk zijn, zelfs als de zoekopdracht zelf dat niet is.
Om de LIKE . op te lossen , OR , en UPPER problemen allemaal tegelijk, verzamel de tekst samen in een enkele kolom in een enkele tabel. Geef dan een FULLTEXT index op die kolom. De, MATCH ... AGAINST ... zal een stuk sneller werken -- tenminste voor het uitvoeren van de SomeName zoeken. (De LEFT JOINs zijn een andere zaak.)