Se hai bisogno di funzionalità di ricerca sofisticate, usa una soluzione di ricerca full-text.
In MySQL, l'indice di ricerca fulltext funzione funziona solo nel motore di archiviazione MyISAM. Questo è un peccato, perché InnoDB è il motore di archiviazione preferibile per tutte le tabelle MySQL. InnoDB nelle versioni recenti di MySQL è più veloce di MyISAM nella maggior parte dei casi e ha migliori funzionalità di ripristino da crash rispetto a MyISAM.
Ci sono state affermazioni dal team di sviluppo di MySQL che intendono implementare un indice fulltext per InnoDB. Ma mancano molti mesi o addirittura anni prima che questo sia disponibile e richiederà sicuramente l'aggiornamento a una versione successiva di MySQL.
Se devi utilizzare gli indici fulltext MyISAM, ti suggerisco di archiviare i tuoi dati principalmente in InnoDB, quindi archiviare una copia del testo ricercabile in una tabella MyISAM.
Potresti anche utilizzare una soluzione esterna come Sphinx Search o Apache Solr per fornire funzionalità di ricerca fulltext esternamente al database. C'è anche un modo per utilizzare un indice Sphinx Search tramite l'interfaccia del motore di archiviazione collegabile MySQL .
Non mi piace usare LIKE
con caratteri jolly o REGEXP
per ricerche full-text. Queste soluzioni comportano scansioni complete della tabella per ogni ricerca e, a seconda del volume dei tuoi dati, vengono eseguite centinaia o migliaia di volte più lentamente rispetto a un indice.
Ho scritto un confronto tra le soluzioni di ricerca fulltext per MySQL nella mia presentazione, "Ricerca di testo completo pratica in MySQL ," e anche in un capitolo del mio libro SQL Antipatterns:evitare le insidie della programmazione di database .
aggiornamento:MySQL 5.6 è attualmente in fase di sviluppo (a febbraio 2012) e implementa una soluzione di indicizzazione fulltext per InnoDB.