j'essaie d'utiliser les vues pour accélerer un grosse requete.
Je cree une vue V1 qui me donne les champs article,quantite,prix J'ai 20 articles.
select * from V1 prend 0,3s (dans phpmyadmin)
lorsque j'effectue select article,sum(quantite) as total,prix from V1 group by article
la requete prend 20 secondeset affiche 16 articles.
Je pense que je n'utilise pas les vues comme il faut.
Pourquoi un tel écart ? le fait de faire cette requete dans une table aurait été instantannée.
tu ne fais pas du tout la même chose donc difficile de comparer.
Eric Rossé
Le Thu, 13 Dec 2007 12:07:37 +0100, J-F Portala écrivait:
j'essaie d'utiliser les vues pour accélerer un grosse requete.
Une vue ne sert pas à accélérer une requête. Une vue sert à filtrer des données ou à simplifier l'écriture de certaines requêtes complexes.
Je cree une vue V1 qui me donne les champs article,quantite,prix J'ai 20 articles.
20 articles différents ? ou y a-t-il des doublons ?
select * from V1 prend 0,3s (dans phpmyadmin)
lorsque j'effectue select article,sum(quantite) as total,prix from V1 group by article
la requete prend 20 secondeset affiche 16 articles.
1 / ce ne sont pas les mêmes requêtes 2 / il faudrait savoir ce qui se cache derrière la vue 3 / doublons ? présence de "null" ? En bref, sans rien connaître des données et des tables sous-jacentes à la vue, difficile de se prononcer
Je pense que je n'utilise pas les vues comme il faut.
Pourquoi un tel écart ? le fait de faire cette requete dans une table aurait été instantannée.
Pas obligatoirement.
Vaut il mieux faire créer des tables temporaires.
Pas obligatoirement; tout dépend du problème qu'on cherche à résoudre.
Le Thu, 13 Dec 2007 12:07:37 +0100, J-F Portala écrivait:
j'essaie d'utiliser les vues pour accélerer un grosse requete.
Une vue ne sert pas à accélérer une requête. Une vue sert à
filtrer des données ou à simplifier l'écriture de certaines
requêtes complexes.
Je cree une vue V1 qui me donne les champs article,quantite,prix
J'ai 20 articles.
20 articles différents ? ou y a-t-il des doublons ?
select * from V1 prend 0,3s (dans phpmyadmin)
lorsque j'effectue
select article,sum(quantite) as total,prix from V1 group by article
la requete prend 20 secondeset affiche 16 articles.
1 / ce ne sont pas les mêmes requêtes
2 / il faudrait savoir ce qui se cache derrière la vue
3 / doublons ? présence de "null" ?
En bref, sans rien connaître des données et des tables
sous-jacentes à la vue, difficile de se prononcer
Je pense que je n'utilise pas les vues comme il faut.
Pourquoi un tel écart ? le fait de faire cette requete dans une table aurait
été instantannée.
Pas obligatoirement.
Vaut il mieux faire créer des tables temporaires.
Pas obligatoirement; tout dépend du problème qu'on
cherche à résoudre.
Le Thu, 13 Dec 2007 12:07:37 +0100, J-F Portala écrivait:
j'essaie d'utiliser les vues pour accélerer un grosse requete.
Une vue ne sert pas à accélérer une requête. Une vue sert à filtrer des données ou à simplifier l'écriture de certaines requêtes complexes.
Je cree une vue V1 qui me donne les champs article,quantite,prix J'ai 20 articles.
20 articles différents ? ou y a-t-il des doublons ?
select * from V1 prend 0,3s (dans phpmyadmin)
lorsque j'effectue select article,sum(quantite) as total,prix from V1 group by article
la requete prend 20 secondeset affiche 16 articles.
1 / ce ne sont pas les mêmes requêtes 2 / il faudrait savoir ce qui se cache derrière la vue 3 / doublons ? présence de "null" ? En bref, sans rien connaître des données et des tables sous-jacentes à la vue, difficile de se prononcer
Je pense que je n'utilise pas les vues comme il faut.
Pourquoi un tel écart ? le fait de faire cette requete dans une table aurait été instantannée.
Pas obligatoirement.
Vaut il mieux faire créer des tables temporaires.
Pas obligatoirement; tout dépend du problème qu'on cherche à résoudre.
J-F Portala
Je vous remercie de votre aide.
En fait , je pensais que la reponse etait evidente, et j'ai peut être manqué de précision.
J'avais une grosse requete qui au fur et à mesure de la pultiplication des champs est devenu trop lente.
J'ai voulu la simplifier en utilisant des vues.
C'est resultat d'une de ces vues qui comporte 20 articles don 4 en doublons, c'est pourquoi j'ai voulu utiliser sum et group.
Je pense que mon erreur est de penser que le resultat de la vue est définitif. C'est pourquoi je m'attendais à ne pas voir une grosse différence de temps entre select * et select sum() group by
surtout sur aussi peu de données.
En fait , le fait d'utiliser sum(quantite) fait recalculer la vue en intégrant cette fonction supplémentaire dans le calcul de la vue, ce qui donne un temps énorme.
Si au lieu d'une vue je cree une table temporaire, le select * et le select sum prenne autant de temps (c'est à dire quasi rien).
Suis je dans le vrai ? ou pas
Jeff
Je vous remercie de votre aide.
En fait , je pensais que la reponse etait evidente, et j'ai peut être manqué
de précision.
J'avais une grosse requete qui au fur et à mesure de la pultiplication des
champs est devenu
trop lente.
J'ai voulu la simplifier en utilisant des vues.
C'est resultat d'une de ces vues qui comporte 20 articles don 4 en doublons,
c'est pourquoi
j'ai voulu utiliser sum et group.
Je pense que mon erreur est de penser que le resultat de la vue est
définitif.
C'est pourquoi je m'attendais à ne pas voir une grosse différence de temps
entre
select * et select sum() group by
surtout sur aussi peu de données.
En fait , le fait d'utiliser sum(quantite) fait recalculer la vue en
intégrant cette fonction supplémentaire dans le calcul de la vue, ce qui
donne un temps énorme.
Si au lieu d'une vue je cree une table temporaire, le select * et le select
sum prenne autant de temps (c'est à dire quasi rien).
En fait , je pensais que la reponse etait evidente, et j'ai peut être manqué de précision.
J'avais une grosse requete qui au fur et à mesure de la pultiplication des champs est devenu trop lente.
J'ai voulu la simplifier en utilisant des vues.
C'est resultat d'une de ces vues qui comporte 20 articles don 4 en doublons, c'est pourquoi j'ai voulu utiliser sum et group.
Je pense que mon erreur est de penser que le resultat de la vue est définitif. C'est pourquoi je m'attendais à ne pas voir une grosse différence de temps entre select * et select sum() group by
surtout sur aussi peu de données.
En fait , le fait d'utiliser sum(quantite) fait recalculer la vue en intégrant cette fonction supplémentaire dans le calcul de la vue, ce qui donne un temps énorme.
Si au lieu d'une vue je cree une table temporaire, le select * et le select sum prenne autant de temps (c'est à dire quasi rien).
Suis je dans le vrai ? ou pas
Jeff
Eric Rossé
Le Fri, 14 Dec 2007 21:31:24 +0100, J-F Portala écrivait:
Je pense que mon erreur est de penser que le resultat de la vue est définitif.
Le résultat d'une vue n'est défini qu'au moment où l'on fait une requête sur la vue, pas au moment où l'on crée la vue. Le but de la vue, c'est la simplification des requêtes et le filtrage des données. L'avantage est le dynamisme : si les données changent, le résultat change également. L'inconvénient est la complexité cachée : on peut se retrouver avec des temps de réponse importants.
Si au lieu d'une vue je cree une table temporaire, le select * et le select sum prenne autant de temps (c'est à dire quasi rien).
Oui, mais il faut aussi compter le temps de création de la table temporaire... ou accepter de ne pas créer la table temporaire à chaque fois, avec pour inconvénient la non fraîcheur des données.
Le Fri, 14 Dec 2007 21:31:24 +0100, J-F Portala écrivait:
Je pense que mon erreur est de penser que le resultat de la vue est
définitif.
Le résultat d'une vue n'est défini qu'au moment où l'on fait une
requête sur la vue, pas au moment où l'on crée la vue. Le but de
la vue, c'est la simplification des requêtes et le filtrage des
données.
L'avantage est le dynamisme : si les données changent, le résultat
change également.
L'inconvénient est la complexité cachée : on peut se retrouver
avec des temps de réponse importants.
Si au lieu d'une vue je cree une table temporaire, le select * et le select
sum prenne autant de temps (c'est à dire quasi rien).
Oui, mais il faut aussi compter le temps de création de la table
temporaire... ou accepter de ne pas créer la table temporaire à
chaque fois, avec pour inconvénient la non fraîcheur des données.
Le Fri, 14 Dec 2007 21:31:24 +0100, J-F Portala écrivait:
Je pense que mon erreur est de penser que le resultat de la vue est définitif.
Le résultat d'une vue n'est défini qu'au moment où l'on fait une requête sur la vue, pas au moment où l'on crée la vue. Le but de la vue, c'est la simplification des requêtes et le filtrage des données. L'avantage est le dynamisme : si les données changent, le résultat change également. L'inconvénient est la complexité cachée : on peut se retrouver avec des temps de réponse importants.
Si au lieu d'une vue je cree une table temporaire, le select * et le select sum prenne autant de temps (c'est à dire quasi rien).
Oui, mais il faut aussi compter le temps de création de la table temporaire... ou accepter de ne pas créer la table temporaire à chaque fois, avec pour inconvénient la non fraîcheur des données.
J-F Portala
Merci , je pense avoir saisi l'utilitité des vues et les précautions à prendre.
Jeff
Merci , je pense avoir saisi l'utilitité des vues et les précautions à
prendre.