probleme avec les vues en mysql

Le
J-F Portala
Bonjour,

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.

Vaut il mieux faire créer des tables temporaires.

Peut on faire des vues de vues.

Merci de votre aide

jeff
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Etienne Valquez
Le #21878791
J-F Portala a écrit :
Bonjour,

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 #21878781
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
Le #21878771
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
Eric Rossé
Le #21878761
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
Le #21878751
Merci , je pense avoir saisi l'utilitité des vues et les précautions à
prendre.

Jeff
Publicité
Poster une réponse
Anonyme