Jeśli potrzebujesz zaawansowanych funkcji wyszukiwania, użyj rozwiązania wyszukiwania pełnotekstowego.
W MySQL wbudowany indeks wyszukiwania pełnotekstowego funkcja działa tylko w silniku pamięci masowej MyISAM. Jest to niefortunne, ponieważ InnoDB jest preferowanym silnikiem przechowywania dla wszystkich tabel MySQL. InnoDB w najnowszych wersjach MySQL jest w większości przypadków szybszy niż MyISAM i ma lepsze funkcje odzyskiwania po awarii niż MyISAM.
Zespół programistów MySQL stwierdził, że zamierzają zaimplementować indeks pełnotekstowy dla InnoDB. Ale dzieli nas wiele miesięcy, a nawet lat, zanim to będzie dostępne i z pewnością będzie to wymagało uaktualnienia do nowszej wersji MySQL.
Jeśli musisz używać indeksów pełnotekstowych MyISAM, sugeruję przechowywanie danych głównie w InnoDB, a następnie przechowywanie kopii tekstu z możliwością wyszukiwania w tabeli MyISAM.
Możesz także użyć zewnętrznego rozwiązania, takiego jak Sphinx Search lub Apache Solr zapewnienie możliwości wyszukiwania pełnotekstowego poza bazą danych. Istnieje nawet sposób na użycie indeksu Sphinx Search za pośrednictwem podłączanego interfejsu silnika pamięci masowej MySQL .
Nie lubię używać LIKE
z symbolami wieloznacznymi lub REGEXP
do wyszukiwania pełnotekstowego. Te rozwiązania wymagają pełnego skanowania tabel dla każdego wyszukiwania i, w zależności od ilości danych, działają setki lub tysiące razy wolniej niż w przypadku indeksu.
W mojej prezentacji napisałem porównanie rozwiązań wyszukiwania pełnotekstowego dla MySQL:„Praktyczne wyszukiwanie pełnotekstowe w MySQL ”, a także w rozdziale mojej książki Antywzorce SQL:unikanie pułapek programowania baz danych .
aktualizacja:MySQL 5.6 jest obecnie w fazie rozwoju (stan na luty 2012) i wdraża rozwiązanie indeksu pełnotekstowego dla InnoDB.