Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/03/2011, 15h25   #1
Membre éprouvé
 
Inscription : janvier 2009
Messages : 301
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 301
Points : 454
Points : 454
Par défaut Utiliser une jointure ou des sous-requêtes

Bonjour,

Je mets en place une requête pour établir le décompte du nombre de devis, de commandes et de factures qui est lié à un client.

Sachant :
  • un devis peut ne jamais se convertir en commande, il sera classé devis sans suite
  • une commande peut provenir d'un devis, mais être également passée directement par le client
  • une facture peut être une commande convertie, où simplement une vente directe avec facture

J'ai fait les deux requêtes suivantes :
Code :
1
2
3
4
5
SELECT C.CLIENT_ID, D.NbreDevis, O.NbreCde, F.NbreFact
 FROM CLIENT C
  LEFT JOIN (SELECT CLIENT_ID, COUNT(*) AS NbreDevis FROM DEVIS GROUP BY CLIENT_ID) AS D ON D.CLIENT_ID = C.CLIENT_ID
  LEFT JOIN (SELECT CLIENT_ID, COUNT(*) AS NbreCde FROM CDE GROUP BY CLIENT_ID) AS O ON O.CLIENT_ID = C.CLIENT_ID
  LEFT JOIN (SELECT CLIENT_ID, COUNT(*) AS NbreFact FROM FACTURE GROUP BY CLIENT_ID) AS F ON F.CLIENT_ID = C.CLIENT_ID
Code :
1
2
3
4
5
SELECT C.CLIENT_ID,
  (SELECT COUNT(*) AS NbreDevis FROM DEVIS D WHERE D.CLIENT_ID = C.CLIENT_ID) AS NbreDevis,
  (SELECT COUNT(*) AS NbreCde FROM CDE E WHERE E.CLIENT_ID = C.CLIENT_ID) AS NbreCde,
  (SELECT COUNT(*) AS NbreFact FROM FACTURE F WHERE F.CLIENT_ID = C.CLIENT_ID) AS NbreFact
FROM CLIENT C
Vous serez t-il possible de m'indiquer laquelle est la plus rapide et m'en expliquer les raisons ?

Personnellement, je pense que la seconde requête est plus rapide, mais je ne sais pas bien expliquer pourquoi.

Merci de m'éclairer.
seabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 19h02   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par seabs Voir le message
Vous serez t-il possible de m'indiquer laquelle est la plus rapide et m'en expliquer les raisons ?
Non, c'est strictement impossible et cela peut même varier d'un moment à l'autre. En effet dans un SGBDR C/S bien conçu il y a un optimiseur qui décide in fine comment sera traité votre requête. La première peut être meilleure que la seconde dans un contexte données et inversement.
Le plan de requête effectif sera la combiansison de l'écriture de votre requête, de la volumétrie des données, de la distribution statistique des données et enfin du savoir faire de l'éditeur en matière d'optimisation. Sachant que MySQL est le très loin le plus mauvais et SQL Server l'un des meilleurs.....

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/03/2011, 21h02   #3
Membre éprouvé
 
Inscription : janvier 2009
Messages : 301
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 301
Points : 454
Points : 454
Bonjour,

Je vous remercie de votre réponse. Le choix doit se faire en fonction des éléments à traiter.

Pour le cas qui m'intéresse, le niveau des volumes traités ne doit pas conduire vers des différences significatives.

A+
seabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h14.


 
 
 
 
Partenaires

Hébergement Web