28Fermer30
NilLe 26/10/2016 à 15:11
Bon, j'ai approfondi le truc :
Le cache de la requête semble se vider à chaque connexion par le serveur. Comme c'est utilisé par BusinessObjects, on dirait qu'il clôt puis rouvre les connexions à chaque opération (youhou !). Passer sous forme de vue fait que c'est MySQL qui conserve son propre cache de requête (donc ce n'est pas directement lié à l'utilisation des vues). Je passe quand-même de 1s (j'avais dû finir par arriver à optimiser la requête) à 0,0008s. Ce comportement est reproductible en lançant les requêtes en direct avec des scripts PHP et des connexions persistantes.

Par contre, il existe les vues materialisées et qui, a priori, fait exactement ce que j'indiquais dans mon message précédent : quand la table d'origine est mise à jour, la table temporaire l'est aussi à la volée. Inconvénient : j'imagine que ça doit prendre de l'espace en mémoire, et je ne sais pas comment ça réagit lors d'un redémarrage du serveur (je n'ai pas trop le temps de tester, là smile ).
Il y a aussi les vues classiques avec table temporaire, mais je n'ai pas non plus pu approfondir (d'autant que je pense que vu les volumes de yN, ça ne correspond pas du tout aux besoins)
Il y a des infos là, avec un petit bench :
https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/vues-materialisees