IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[Performances] Ordre d'éxecution de JOIN / WHERE


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 96
    Par défaut [Performances] Ordre d'éxecution de JOIN / WHERE
    Je souhaitais savoir à quel moment la clause where était traitée dans une requete de ce type :

    select * from commande c inner join reception r on c.nocde=r.nocde where c.nomclient="DUPONT"

    1-Avant la jointure
    2-Apres la jointure

    Si c'est apres la jointure alors comment est il possible de filtrer avant la jointure.

    MERCI

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Hum...

    Il y a déjà une question similaire qui a soulevé pas mal d'avis partagés mais la conclusion générale est de cet ordre d'idée :
    tu n'as pas à te soucier à QUEL MOMENT est appliqué la jointure par rapport à la clause where dans la mesure où c'est à l'optimiseur de s'en charger.

    Par conséquent, que veux-tu dire par :
    Citation Envoyé par brice01
    comment est il possible de filtrer avant la jointure
    Il ne t'est pas possible d'ajouter un nouveau filtre dans le where ?

  3. #3
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    comme ça (si j'ai bien compris la question).
    select * from commande c inner join reception r on c.nocde=r.nocde and c.nomclient="DUPONT"

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 96
    Par défaut
    Je precise :
    table commande 200000 lignes
    table reception 300000 lignes

    Si le filtre sur le client de la commande s'execute en premier alors on passe de 200000 lignes à 1000 lignes et donc la jointure ne se fait que sur 1000 lignes au lieu de 200000 lignes.
    Peut etre que sur ce volume de donnée cela ne change rien mais si on passe sur des volumes 10 fois voir 100 fois superieur cela peut avoir un impact beaucoup important.

  5. #5
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    re,

    Si c'est simplement dans un (louable) but d'optimisation de tes performances Magnus t'as donné la réponse. C'est le boulot de l'optimiseur de déterminer le meilleur plan de requête. Tout ce que tu as à faire c'est de lui donner les bons éléments pour le faire en indexant correctement tes tables et mettant tes stats régulièrement à jour. Dans 1 rq ''normale'' l'ordre ds lequal tu vas écrire tes clauses n'influera pas sur la façon dont elle sera exécutée par le moteur.

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 96
    Par défaut
    merci beaucoup !
    Comme ca c'est clair !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SELECT, JOINS, WHERE
    Par Girzi dans le forum Requêtes
    Réponses: 10
    Dernier message: 07/01/2009, 16h43
  2. DELETE JOIN WHERE
    Par SpaceFrog dans le forum Requêtes
    Réponses: 7
    Dernier message: 28/03/2008, 15h29
  3. join = where ?
    Par Peanut dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/12/2007, 10h06
  4. index et ordre des attributs dans clause where
    Par monoludo dans le forum SQL
    Réponses: 2
    Dernier message: 04/10/2007, 21h34
  5. Probleme de SQL INNER JOIN WHERE
    Par korben06 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/06/2007, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo