OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
ma 3 problemy z wydajnością:
ORjest słabo zoptymalizowany. Zasadniczo tabelę należy przeskanować, aby sprawdzić wszystkie wiersze. Indeksy raczej nie pomogą.UPPER(indexed-column)zapobiega używaniu indeksu w tej kolumnie. Można to łatwo obejść, aby uniknąć deklarowania, że kolumna maCOLLATIONto jest „niewrażliwe na wielkość liter” – czyli coś w rodzajuutf8_unicode_ci; zwróć uwagę na_ci.LIKE '%...nie można użyć indeksu z powodu wiodącego symbol wieloznaczny.
Ponadto zwykle głupotą jest posiadanie
32497 row(s) returned
Co zamierzasz zrobić z tyloma rzędami? Czas transferu w sieci będzie znaczący, nawet jeśli samo zapytanie nie jest.
Aby „rozwiązać” LIKE , OR i UPPER wszystkie problemy naraz, zbierz tekst w jednej kolumnie w jednej tabeli. Następnie podaj FULLTEXT indeks w tej kolumnie. MATCH ... AGAINST ... będzie działać znacznie szybciej - przynajmniej za wykonanie SomeName Szukaj. (LEFT JOINs to inna sprawa.)