Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy wyszukiwanie pełnotekstowe jest odpowiedzią?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prześlij wiele skryptów php i przechowuj w bazie danych mysql

  2. Dlaczego użycie INT do wybrania indeksu Varchar zawierającego liczby jest znacznie wolniejsze niż użycie ciągów?

  3. odzyskaj bazę danych mysql z ibdata1

  4. Test wyrażenia regularnego MySql

  5. Catchable błąd krytyczny:obiekt klasy mysqli_stmt nie mógł zostać przekonwertowany na string