OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
má 3 problémy s výkonem:
ORje špatně optimalizovaný. V zásadě musí být tabulka naskenována, aby se zkontrolovaly všechny řádky. Indexy pravděpodobně nepomohou.UPPER(indexed-column)zabrání použití indexu v tomto sloupci. To lze snadno vyřešit deklarací tohoto sloupce jakoCOLLATIONto "nerozlišuje malá a velká písmena" - to znamená něco jakoutf8_unicode_ci; všimněte si_ci.LIKE '%...nelze použít index kvůli začátku zástupný znak.
Navíc je obvykle pošetilé mít
32497 row(s) returned
Co budeš dělat s tolika řádky? Doba síťového přenosu bude značná, i když samotný dotaz není.
Chcete-li "vyřešit" LIKE , OR a UPPER problémy najednou, shromážděte text do jednoho sloupce v jedné tabulce. Poté zadejte FULLTEXT index v tomto sloupci. MATCH ... AGAINST ... poběží mnohem rychleji – alespoň pro provedení SomeName Vyhledávání. (LEFT JOINs jsou jiná věc.)