Bonjour,
J'ai deux applications (un front office et un back office) avec une base MySQL 5 "volumineuse". Le front office interroge souvent un champ text via une requête LIKE '%abc%' dans une table qui contient près de 75000 lignes. De manière générale, le font office ne fait que des SELECT.
Autant dire que la recherche n'est pas des plus efficaces (environ 10 secondes) et je pense que c'est tout simplement lié au fait que le LIKE n'est pas franchement fait pour ça. Mon idée c'est de mettre un index FULLTEXT sur le champ en question. Après des tests, ça ne prend plus que 4 secondes pour faire la même recherche.
Ma question est plutôt d'ordre pratique. En effet, ma base est entièrement en INNODB car les contraintes type FOREIGN KEY sont indispensables dans notre cas (la saisie des données se fait dans le back office) si l'on veut garder une base cohérente. Dans ce cas, pas de FULLTEXT, on est bien d'accord.
Vous l'aurez compris je cherche à améliorer les performances des recherches via la front office. Je pense donc mettre en place une copie de la base INNODB entièrement dédiée au front office et adaptée à l'usage. Soit des tables en MyISAM et des index FULLTEXT bien placés.
Dans un premier temps, que pensez-vous de l'idée ?
Dans un deuxième temps, que me conseillez-vous pour faire la copie et la transformation INNODB->MyISAM (il faut supprimer les FK, change le moteur de chaque table et placer les index). Un shell qui lance des commande SQL ? une procédure stockée ? autre ?
Notez que je peux avoir un différentiel dans les données dispos dans le front office par rapport au back office. Donc il est tout à fait envisageable de faire passer un traitement la nuit afin de rafraîchir la base du front office. Si toutefois il y aurait des solutions permettant de synchroniser la base MyISAM avec la base INNODB en temps réel, je suis près à les étudier (la réplication, ça peut servir à ça ?)
Merci de vos contributions
Partager