Wpis z mikrobloga

Hej Mireczki! Mam sobie tabelę w MySQL zawierającą wszystkie słowa kluczowe wyszukiwane przez użytkowników (ponad 300 tys. rekordów). Chcę na zadane słowo kluczowe pobrać słowa, które są już są w bazie danych i są podobne do tego zadanego słowa. Używam FULLTEXTa, ale przy większym ruchu proces mysql zabija mi serwer, a same zapytania wykonują się kilkanaście sekund.

SELECT keyword, MATCH(keyword) AGAINST("white wedding shoes") AS score FROM keywords WHERE MATCH(keyword) AGAINST("white wedding shoes") ORDER BY SCORE DESC LIMIT 15
jakiś pomysł jak optymalnie przeprowadzić takie wyszukanie?
#programowanie #informatyka #bazydanych
  • 12
@syhro: baza zapewne jest na serwerze? Jakie jest obciążenie ram na serwerze i ile z tego jest zużyte przez sql? Miałem podobne issue z bazą z TFS'a. Pomogło ograniczenie użycia ramu przez baze z unlimited do np 12 GB z 16GB dostępnych u nas. Może to pomoże...
@syhro: FULLTEXT nie służy do dopasowywania słów kluczowych tylko (jak nazwa wskazuje) do szukania w specjalnie indeksowanych tekstach (m.in. żeby uniknąć tworzenia tabel ze słowami kluczowymi). Twoje zapytanie lepiej będzie działać jeśli rozbijesz frazę na osobne słowa i po prostu je wyszukasz (fraza z przykładu to odpowiednik ... WHERE keyword='white' OR keyword=...). Oczywiście wcześniej trzeba zmienić indeksowanie tabeli, bo jest bez sensu.