Autor | Zpráva | ||
---|---|---|---|
stepanka Profil * |
#1 · Zasláno: 2. 5. 2012, 16:58:10
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 |
#2 · Zasláno: 2. 5. 2012, 18:01:30
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 * |
#3 · Zasláno: 3. 5. 2012, 09:40:27
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. |
||
Časová prodleva: 12 let
|
0