sql >> Databáze >  >> RDS >> Mysql

Je fulltextové vyhledávání odpovědí?

Problém s vyhledáváním typu '%keyword%' je v tom, že neexistuje způsob, jak v něm efektivně vyhledávat v běžné tabulce, i když v tomto sloupci vytvoříte index. Přemýšlejte o tom, jak byste ten řetězec vyhledali v telefonním seznamu. Ve skutečnosti neexistuje způsob, jak to optimalizovat - musíte skenovat celý telefonní seznam - a to je to, co dělá MySQL, skenování celé tabulky.

Pokud toto vyhledávání změníte na 'keyword%' a použijete index, můžete získat velmi rychlé vyhledávání. Zdá se však, že to není to, co chcete.

Takže s ohledem na to jsem docela dost používal fulltextové indexování/vyhledávání a zde je několik pro a proti:

Výhody

  • Velmi rychle
  • Vrátí výsledky seřazené podle relevance (ve výchozím nastavení, i když můžete použít libovolné řazení)
  • Lze použít zastavovací slova.

Nevýhody

  • Funguje pouze s tabulkami MyISAM
  • Příliš krátká slova jsou ignorována (výchozí minimum jsou 4 písmena)
  • Vyžaduje jiný SQL v klauzuli where, takže budete muset upravit stávající dotazy.
  • Neodpovídá částečným řetězcům (například 'slovo' neodpovídá 'klíčovému slovu', pouze 'slovo')

Zde je dobrá dokumentace o fulltextovém vyhledávání .

Další možností je použít vyhledávací systém, jako je Sphinx . Může být extrémně rychlý a flexibilní. Je optimalizován pro vyhledávání a dobře se integruje s MySQL.



  1. Regulární výraz SQL pro rozdělení sloupce (řetězce) na více řádků na základě oddělovače '/n'

  2. Jak vytvořit databázový projekt Oracle pomocí Visual Studio 2010?

  3. Nelze najít mysql.sock

  4. Virtuální hostitel WAMP nefunguje