Problem z wyszukiwaniem typu „%keyword%” polega na tym, że nie ma możliwości efektywnego przeszukiwania go w zwykłej tabeli, nawet jeśli utworzysz indeks w tej kolumnie. Pomyśl, jak byś wyglądał ten sznurek w książce telefonicznej. Właściwie nie ma sposobu, aby go zoptymalizować - musisz przeskanować całą książkę telefoniczną - i to właśnie robi MySQL, pełne skanowanie tabeli.
Jeśli zmienisz to wyszukiwanie na „keyword%” i użyjesz indeksu, możesz uzyskać bardzo szybkie wyszukiwanie. Wygląda na to, że nie tego chcesz.
Mając to na uwadze, sporo korzystałem z indeksowania/wyszukiwania pełnotekstowego, a oto kilka zalet i wad:
Zalety
- Bardzo szybko
- Zwraca wyniki posortowane według trafności (domyślnie, chociaż możesz użyć dowolnego sortowania)
- Można użyć słów stop.
Wady
- Działa tylko z tabelami MyISAM
- Słowa, które są zbyt krótkie, są ignorowane (domyślne minimum to 4 litery)
- Wymaga innej klauzuli SQL w klauzuli where, więc będziesz musiał zmodyfikować istniejące zapytania.
- Nie pasuje do częściowych ciągów (na przykład „słowo” nie pasuje do „słowa kluczowego”, tylko „słowo”)
Oto dobra dokumentacja na temat wyszukiwania pełnotekstowego .
Inną opcją jest użycie systemu wyszukiwania, takiego jak Sphinx . Może być niezwykle szybki i elastyczny. Jest zoptymalizowany pod kątem wyszukiwania i dobrze integruje się z MySQL.