Mysql
 sql >> Database >  >> RDS >> Mysql

Regexp e mysql:esiste un operatore AND

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.