Pokud potřebujete sofistikované vyhledávací funkce, použijte řešení fulltextového vyhledávání.
V MySQL, vestavěný index fulltextového vyhledávání Tato funkce funguje pouze v úložišti MyISAM. To je nešťastné, protože InnoDB je preferovaným úložištěm pro všechny tabulky MySQL. InnoDB v posledních verzích MySQL je ve většině případů rychlejší než MyISAM a má lepší funkce pro obnovu po havárii než MyISAM.
Vývojářský tým MySQL uvedl, že zamýšlí implementovat fulltextový index pro InnoDB. Ale od toho, aby to bylo k dispozici, nás dělí mnoho měsíců nebo dokonce let a určitě to bude vyžadovat upgrade na nějakou novější verzi MySQL.
Pokud musíte používat fulltextové indexy MyISAM, navrhoval bych uložit svá data primárně do InnoDB a poté uložit kopii prohledávatelného textu do tabulky MyISAM.
Můžete také použít externí řešení, jako je Sphinx Search nebo Apache Solr poskytovat možnosti fulltextového vyhledávání externě v databázi. Existuje dokonce způsob, jak použít index Sphinx Search prostřednictvím rozhraní zásuvného úložiště MySQL .
Nerad používám LIKE
se zástupnými znaky nebo REGEXP
pro fulltextové vyhledávání. Tato řešení vyžadují úplné prohledávání tabulek pro každé vyhledávání a v závislosti na objemu vašich dat běží stovky nebo tisíckrát pomaleji, než kdybyste měli index.
Ve své prezentaci jsem napsal srovnání fulltextových vyhledávacích řešení pro MySQL, "Praktické fulltextové vyhledávání v MySQL “ a také v kapitole mé knihy SQL Antipatterns:Avoiding the Ptfalls of Database Programming .
aktualizace:MySQL 5.6 je aktuálně ve vývoji (k únoru 2012) a implementuje fulltextové indexové řešení pro InnoDB.