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.