Autor Zpráva
stepanka
Profil *
Ahoj,

můžu poprosit o radu?

Mám dotaz pro fulltextové vyhledávání:

SELECT *
                FROM clanek C 
                JOIN region_portal ON portal_clanek_en = nazev_portal_en
                JOIN foto_clanek FC ON C.id_clanek = FC.id_clanek
                WHERE aktivni = 1 
                AND aktivni_od < NOW() 
                AND aktivni_do > NOW() 
                AND  
                (
                     MATCH(nazev_clanek)   AGAINST ('volny-cas*' IN BOOLEAN MODE) OR 
                     MATCH(anotace_clanek) AGAINST ('volny-cas*' IN BOOLEAN MODE) OR 
                     MATCH(text)           AGAINST ('volny-cas*' IN BOOLEAN MODE)
                ) 
                GROUP BY C.id_clanek
                ORDER BY 10*MATCH(nazev_clanek) AGAINST ('volny-cas*' IN BOOLEAN MODE) DESC

Na lokále mi zabere asi 1,3s. Nevíte prosím někdo, zda by šel tento dotaz zrychlit a jak? Už jsem to osekala ze 4s na těch 1,3s, ale pořád mi to přijde dlouho.

Moc děkuju!
Kajman
Profil
Fulltext zrychlí vytvoření fulltextového indexu (či indexů) a nepoužívání boolean módu.

Dále se vyvarujte v selectech použití now() - lepší bude dosazení dne, případně přibližného času (při stejných vstupech pak může při dalších spuštěních použít mysql svou cache).

Pokud trváte na boolean módu, tak by se hodil spojený index (aktivni,aktivni_od) případně i index nad aktivni_do.

Ještě by se dalo zkusit připojit ty dvě další tabulky až na výsledek filtrování, ale v tomto případě to asi vliv mít nebude.
stepanka
Profil *
Kajman:
Zrušila jsem nakonec ten BOOLEAN MODE a dodržela i ostatní rady, už jsem na 0.1264 sekund, což je super. Moc děkuju.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: