Mysql
 sql >> Base de données >  >> RDS >> Mysql

Regexp et mysql :existe-t-il un opérateur ET

Si vous avez besoin de fonctionnalités de recherche sophistiquées, utilisez une solution de recherche en texte intégral.

Dans MySQL, l'index de recherche intégré la fonctionnalité ne fonctionne que dans le moteur de stockage MyISAM. C'est malheureux, car InnoDB est le moteur de stockage préférable pour toutes les tables MySQL. InnoDB dans les versions récentes de MySQL est plus rapide que MyISAM dans la plupart des cas, et a de meilleures fonctionnalités de récupération après incident que MyISAM.

L'équipe de développement MySQL a déclaré avoir l'intention d'implémenter un index de texte intégral pour InnoDB. Mais il nous reste plusieurs mois, voire des années, avant que cela ne soit disponible, et cela nécessitera certainement une mise à niveau vers une version ultérieure de MySQL.

Si vous devez utiliser des index de texte intégral MyISAM, je vous suggère de stocker vos données principalement dans InnoDB, puis de stocker une copie du texte consultable dans une table MyISAM.

Vous pouvez également utiliser une solution externe comme Sphinx Search ou Apache Solr pour fournir des capacités de recherche en texte intégral en externe à la base de données. Il existe même un moyen d'utiliser un index Sphinx Search via l'interface du moteur de stockage enfichable MySQL .

Je n'aime pas utiliser LIKE avec des caractères génériques ou REGEXP pour les recherches plein texte. Ces solutions nécessitent des analyses de table complètes pour chaque recherche et, selon le volume de vos données, s'exécutent des centaines ou des milliers de fois plus lentement que si vous disposiez d'un index.

J'ai écrit une comparaison des solutions de recherche en texte intégral pour MySQL dans ma présentation, "Recherche en texte intégral pratique dans MySQL ," et aussi dans un chapitre de mon livre Antipatterns SQL :éviter les pièges de la programmation de base de données .

mise à jour :MySQL 5.6 est actuellement en développement (depuis février 2012) et implémente une solution d'index de texte intégral pour InnoDB.