Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1379 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation de requétes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation de requétes

n°1378052
brasseld
Posté le 31-05-2006 à 12:43:47  profilanswer
 

Bonjour à toutes et à tous,
 
Etant novice en SQL, je voudrai savoir s'il est possible d'optimiser ces requêtes :

Code :
  1. SELECT
  2.      SUM(vdp.ENGAGE*(ao.POURCENT/100)) as ENG_TOT, SUM(vdp.FACTURE*(ao.POURCENT/100)) as FACT_TOT
  3. FROM VENT_DIVERS_PROJET vdp
  4.      JOIN APPLI_OBJS ao ON vdp.ID_APPLIPROJET = ao.ID_APPLI
  5.      JOIN BUDGET.COMMANDE_AUTRE ca ON vdp.ID_COMMANDE = ca.NUM_COMMA
  6. WHERE vdp.ANNEE = '2006'
  7.      AND ao.ID_OBJS = '2'
  8.      AND vdp.ID_APPLIPROJET = '3'
  9.      AND vdp.ID_ACTIVITE = '8'
  10.      AND ca.ID_TYPE = '1'


Code :
  1. SELECT
  2.      SUM(vdp.ENGAGE*(ao.POURCENT/100)) as ENG_TOT, SUM(vdp.FACTURE*(ao.POURCENT/100)) as FACT_TOT
  3. FROM VENT_DIVERS_PROJET vdp
  4.      JOIN APPLI_OBJS ao ON vdp.ID_APPLIPROJET = ao.ID_APPLI
  5.      JOIN BUDGET.COMMANDE_AUTRE ca ON vdp.ID_COMMANDE = ca.NUM_COMMA
  6. WHERE vdp.ANNEE = '2006'
  7.      AND ao.ID_OBJS = '2'
  8.      AND vdp.ID_APPLIPROJET = '3'
  9.      AND vdp.ID_ACTIVITE = '8'
  10.      AND ca.ID_TYPE = '2'


Code :
  1. SELECT
  2.      SUM(vdp.ENGAGE*(ao.POURCENT/100)) as ENG_TOT, SUM(vdp.FACTURE*(ao.POURCENT/100)) as FACT_TOT
  3. FROM VENT_DIVERS_PROJET vdp
  4.      JOIN APPLI_OBJS ao ON vdp.ID_APPLIPROJET = ao.ID_APPLI
  5.      JOIN BUDGET.COMMANDE_AUTRE ca ON vdp.ID_COMMANDE = ca.NUM_COMMA
  6. WHERE vdp.ANNEE = '2006'
  7.      AND ao.ID_OBJS = '2'
  8.      AND vdp.ID_APPLIPROJET = '3'
  9.      AND vdp.ID_ACTIVITE = '8'
  10.      AND ca.ID_TYPE = '3'


 
Entre chaque requête, seul le test sur l'ID_TYPE dans la clause where change. N'est-il pas possible de ne faire qu'une seule requête ?
Précision, mon travail s'effectue sur une BDD MySQL 5.0
 
Merci d'avance de vos réponses  :)

mood
Publicité
Posté le 31-05-2006 à 12:43:47  profilanswer
 

n°1378065
Beegee
Posté le 31-05-2006 à 13:00:26  profilanswer
 

Code :
  1. SELECT
  2.           ca.ID_TYPE,
  3.           SUM(vdp.ENGAGE*(ao.POURCENT/100)) as ENG_TOT, SUM(vdp.FACTURE*(ao.POURCENT/100)) as FACT_TOT
  4. FROM VENT_DIVERS_PROJET vdp
  5.           JOIN APPLI_OBJS ao ON vdp.ID_APPLIPROJET = ao.ID_APPLI
  6.           JOIN BUDGET.COMMANDE_AUTRE ca ON vdp.ID_COMMANDE = ca.NUM_COMMA
  7. WHERE vdp.ANNEE = '2006'
  8. AND ao.ID_OBJS = '2'
  9. AND vdp.ID_APPLIPROJET = '3'
  10. AND vdp.ID_ACTIVITE = '8'
  11. AND ca.ID_TYPE IN ('1', '2', '3')
  12. GROUP BY ca.ID_TYPE;

n°1378073
brasseld
Posté le 31-05-2006 à 13:17:59  profilanswer
 

OK, ça marche bien sauf que quand je n'ai pas de résultats pour le type 1 par exemple, il ne me l'affiche pas. Et moi je veux que ma requéte me sorte au final trois ligne (une pour chaque type)

n°1378134
Beegee
Posté le 31-05-2006 à 14:25:14  profilanswer
 

Tu as donc des types pour lequels il n'y a pas de ligne dans APPLI_OBJS ou dans COMMANDE_AUTRE ?
 
Dans ce cas il faut faire des LEFT JOIN au lieu de JOIN ...

n°1378180
brasseld
Posté le 31-05-2006 à 15:11:49  profilanswer
 

En fait, il ya des types pour lesquels il n'y a pas de ligne dans VENT_DIVERS_PROJET...

n°1378196
Beegee
Posté le 31-05-2006 à 15:27:50  profilanswer
 

Dans ce cas il faut réécrire la clause from pour que ce soit VENT_DIVERS_PROJET qui soit en jointure externe.
 
Utilise des RIGHT JOIN au lieu des JOIN pour voir ...

n°1378200
brasseld
Posté le 31-05-2006 à 15:36:55  profilanswer
 

ça ne change rien avec les RIGHT JOIN. En fait tous les types sont listés dans une table TYPE_COMMANDE... mais je ne vois pas comment faire ;-(

n°1378202
Beegee
Posté le 31-05-2006 à 15:41:20  profilanswer
 

Alors il faut que ta table TYPE_COMMANDE soit la principale de la requête.
 
Enfin c'est pas évident à voir sans le schéma complet des tables impactées ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation de requétes

 

Sujets relatifs
Optimisation du codeFaire plusieurs requetes SQL dans un dataSet
Optimisation récupération d'un gros tableau MySQL.Optimisation des requetes
[MySQL] optimisation (2 requêtes en une...) [4.0.12 final sortie]Optimisation requêtes SQL !
confirmation sur optimisation de requêtes sql ??[SQL] Optimisation de requêtes
Optimisation de requetes SQL...y'a un prog qui fait ca tout seul ??Suite optimisation des requêtes SQL
Plus de sujets relatifs à : Optimisation de requétes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR