MySQL et les vues ... c'est la catastrophe

Ce n'est qu'un bref retour d'expérience mais si vous ne deviez retenir qu'une seule chose: oubliez les vues avec MySQL !

Ça fait quelques mois que abuledu.net commence a être très très lent (enfin, d'après moi vu que c'est mon outil de tous les jours), la raison principale de ces lenteurs à mon avis est lié au fait que la base commence à prendre une taille sympathique.

Alors, après avoir mangé la doc de l'optimisation de mysql (my.cnf, gestion de la ram, optimisations des clés etc.), j'ai commencé à regarder du côté de mysql-proxy, puis memcached (lié à mysql-proxy) ... et puis finalement j'en suis arrivé à la conclusion habituelle dès lors qu'il est question de lenteurs en SQL ... optimise donc ton code source plutôt que de te lancer dans un cluster avec 4 serveurs mysql: abuledu.net n'est pas encore ebay (c'est de moi).

J'ai donc repris les quelques centaines de lignes de SQL à la recherche des requêtes op-ti-mi-sa-bl-es (bon sang !), ça n'a pas changé grand chose. Et puis tout a coup je me suis demandé si ça ne serait pas lié à des VIEWS que j'ai (j'en utilise deux) et qui me permettent de simplifier dramatiquement mes requêtes SQL ... et bingo.

Amélioration de 45 pour un tout de même, oui ma page d'accueil ne mets plus qu'une seconde pour s'afficher au lieu d'environ 45 secondes avant ! Si vous voulez donc mon conseil du jour: oubliez les VIEWS avec MySQL ça vous économisera des dimanches et faites plutôt une table dans laquelle vous insérez le résultat de la vue et que vous actualisez de temps en temps via un cron par exemple.

QR code
Send to friend

Commentaires

10 oct. 2010 17:51

En principe les views sont soit dynamiques: la view est recalculée à chaque consultation (d'où les 45 secondes) soit statiques (recalculées lorsqu'un trigger se déclenche, [trigger paramétrable]).
Faire une view dynamique sur des tables qui commencent à devenir lourdes c'est fatalement une mauvaise idée.

Grao
28 mar. 2011 21:14

Un peu tard mon commentaire mais bon ...

Regarde aussi du côté des indexes avec la commande explain, ça peut aussi arranger pas mal de choses (j'étais dans le même cas que toi, et pour avoir ajouté des index aux bons endroits, j'ai pulvérisé le temps d'une vue qui devenait leeeeeeeeeeeeeeeeeeeeente avec l'augmentation de la taille des tables la constituant :) )

jpicaude

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.