|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Dans le cas où il y ait des pros MySQL qui trainent sur ce forum je tente un double post. Pas taper
!Citation:
|
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : octobre 2003 Messages : 2 714 ![]() |
Salut,
Je ne suis pas un expert MySQL, mais j'ai l'impression que les vues ne sont rien de plus qu'une matérialisation d'une requête particulière, et donc au niveau performance je serais étonné de constater une différence par rapport à la même requête lancée "en dur". Le problème n'est pas d'avoir une vue qui optimise ou pas la requête, mais d'optimiser la requête elle même. Pour ça, il y a plusieurs choses dont il faut s'assurer : - Avoir un modèle bien indexé, avec des indexs idealement de type Integer, car ça accèlere grandement le traitement. - Banir les jointures sur des colonnes non indexées Après je ne connais pas spécifiquement ton modèle, pourquoi une necessité de faire une requête aussi "complexe" au niveau des jointures ? Peux-tu en donner un exemple ?
__________________
K |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Tu sais pas ce que tu fais en demandant cette requête
Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : juin 2004 Messages : 115 ![]() |
tu essayes de faire un jeu de role en php basé sur l'intégralité des regles de role master?
A ce niveau c'est ptet au nivo de la conception de la base de donnée qu'une optimisation est envisageable? Bon courage |
|
|
00
|
|
|
#5 | |||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : octobre 2003 Messages : 2 714 ![]() |
Les tests en VARCHAR sont très lents, voila ce que je ferais si j'étais toi :
J'externaliserai chaque champ libellé êtant voué à être requêté, par exemple ton champs statut, ou field_name. Ensuite, apparement dans la logique de ton application, tu as besoin de regrouper certaines informations entre elle : pour ça, rien de mieux que de faire un système hierarchique ( un peu comme un modèle objet à base d'héritage ) qui te permettrait du coup au lieu de faire un OR, de faire directement une requête sur une "famile d'objets" qui répondent à ton besoin.
__________________
K |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : octobre 2003 Messages : 2 714 ![]() |
Oui, par exemple imaginons un tel modèle de départ :
Fruits id_fruit nom_fruit Panier id_panier Panier_Fruit id_panier id_fruit quantité Je souhaite faire une requête sur mon panier, pour obtenir les fruits rouges. Au lieu de faire un peu ce que tu fais dans ta requête ( af.field_name = 'assigned_to' OR af.field_name = 'multi_assigned_to' ) ceci : where nom_fruit = 'fraise' OR nom_fruit='cerise' Tu pourrais améliorer ton modèle, en ajoutant une "famille" fruit rouge : Famille_Fruit id_famille nom_famille Fruits id_fruit id_famille nom_fruit Ta requête deviendrait alors : where id_famille = 1 En ajoutant les bonnes clés étrangères et une bonne indexation, ça améliorerait _BEAUCOUP_ le temps de réponse J'ai prit un exemple simpliste, car je ne comprend pas bien ton modèle, sinon j'aurais peut-être utiliser les termes de ton modèle directement.
__________________
K |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : juin 2004 Messages : 115 ![]() |
tu as concu ta base de donnée en freestyle ou t passé par une méthode comme merise ou uml?
|
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
j'ai compris ton exemple ! Citation:
Mais à vue de pied c'est pas mal fichu et il y a peu de choses à redire... hormis cette requête. Bon ben merci du coup de main sinon j'ai plus d'infos sur le forum MySQL (ils ont du finir de manger Sujet résolu pour moi : pas de vues ! |
||
|
|
00
|
|
|
#11 | ||||||||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 429 ![]() |
Les vues n'ont rien à voir avec les performances.
une vue = un select donc faire un select dans une vue c'est faire un select de select. en fait cela n'influ pas sur les perfs. une vue est intéressante lorsque tu dois remonter une info toujours de la même façon. par exemple j'ai une table alerte et une autre type_alerte. (alert contenant un id de type d'alerte) lorsque je remonte une alerte je veux aussi systématiquement son type, non pas l'id de son type mais le type lui même me donne les alertes mais je n'ai pas leur type. Code :
si je veux une seule alerte je dois faire : Code :
utiliser une vue va me permetre de travailler avec des alertes typées. Code :
Code :
par exemple je fait au près de mes client des interventions in situe, des formation, des audit etc. toutes ses actions ont les mêmes champs. mais j'ai besoin de gérer les différents type d'actions indépendament car la sémantique associé est différente. il serait dommage de créer plusieurs table avec la même structure. je fait donc une table action et autant de vue que de type d'actions je peux donc manipuler les actions comme je voulais mais les stoquer en une seule table. si vous programmé en objet vous pouves avec ce principe stocker vos objets dans une table unique. tous mes objets de classe intervention, formation, audit dérive de la classe actions pour les récupérer je pioche dans la vue corespondante. A+JYT |
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com