Serwis generował dość duże obciążenie, więc stoi już na dedyku... Mimo to strony generują się po 5 sekund, według statystyk 90% czasu procesora zjada szukajka, a dokładnie zapytanie szukające. Z tego, co powiedzial admin, to za kazdym razem jest mielona cala baza, nie sa wykorzystywane zadne indeksy.
Zapytanie jest w stylu (nie ja je budowalem):
SELECT *, ((fraza MATCH AGAINST tytul)+(fraza MATCH AGAINST opis)+...) AS suma FROM tabela WHERE ((%wyraz1% LIKE tytul) OR (%wyraz2% LIKE tytul) OR (%wyraz1% LIKE opis) ... (%wyrazX% LIKE jakiestrzeciepole)) ORDER BY suma
(kod z pamieci, ogolny sens chyba zachowany?)
pomyslalem nad rozwiazaniem podobnym jak w phpbb2.
- utworzona tabela words, czyli id slowa + slowo
- utworzona tabela match_words, czyli id slowa + id obiektu
- wyszukiwanie przez takie zapytania:
SELECT id FROM words WHERE ("slowo1" = word) OR ("slowo2" = word) OR ("slowo3" = word)
// zamiast uzycia LIKE dam lowercase
SELECT id, COUNT(word) AS licznik FROM match_words WHERE word IN (2,4,5,6) GROUP BY id ORDER BY licznik LIMIT 10
// 2,4,5,6 - z poprzedniego zapytania id-ki; licznik zeby wedlug trafnosci sortowac
SELECT count(id) FROM match_words WHERE word IN (2,4,5,6)
//do obliczania ilosci stron rzy stronicowaniu (maslo maslane ;))
prosty SELECT z pobieraniem okreslonych id z docelowej bazy
zapytania z glowy, nie testowane, mozliwe literowki
i teraz zapytanko do Was - czy dobrze mysle? Czy sa moze lepsze sposoby optymalizacji, zeby odciazyc baze?