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 :

[performance] condition dans le join ou le where ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut [performance] condition dans le join ou le where ?
    Bonjour,

    J'ai une petite question qui me vient comme ça et je n'ai trouvé nulle part quelque chose parlant de ça.

    Je vais illustrer ma question par un exemple tout bête (pas besoin de DDL)

    Vaut-il mieux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from machin inner join truc on machin.id = truc.id where machin.numero = 1
    Ou ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from machin inner join truc on machin.id=truc.id and machin.numero = 1
    Pourquoi ?
    Beaucoup de différence niveau perf ?

    (pour la petite histoire je suis en train de faire un gros générateur de requête, lesquelles doivent être assez performantes)

    PS : Je suis sous DB2 au cas ou.

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Les performances d'execution sont en principe les mêmes.
    En revanche les performances de la phase de calcul du plan de requête sont généralement meilleurs avec un ejointure exprimée dans une clause JOIN que daans le WHERE.
    Pourquoi ?
    Simplement parce que l'optimiseur présuppose que les colonnes présentes dans la clause ON du JOIN sont dotées d'index...
    Ce qui n'est pas vrai dans une clause WHERE car les jointures sont noyées dans les autres filtres.

    Autres éléments, voir le papier que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...ointures/#L1.2
    § UN CONSEIL IMPORTANT.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Ce n'est pas exactement une jointure entre 2 tables.

    Dans l'exemple que je donne c'est juste un filtrage (machin.numero=1). Habituellement on met plutôt ça dans le where, mais ça m'arrangerait de le laisser dans la jointure du from.
    Et cette colonne numero n'aura pas a priori d'index.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Dans le cas d'un INNER JOIN, ça n'a pas beaucoup d'impact, même au niveau du plan d'exécution.
    En revanche, ça peut être extrèmement impactant sur les résultat en cas de jointure externe
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Conditions : dans le INNER JOIN ou le WHERE ?
    Par Khleo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/12/2010, 21h50
  2. Optimisation : Critère dans le JOIN ou le WHERE ?
    Par Ry_Yo dans le forum Langage SQL
    Réponses: 15
    Dernier message: 16/03/2009, 21h10
  3. Aide rédaction des conditions dans where clause
    Par Pahcixam dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/08/2007, 13h01
  4. Nombre de condition dans WHERE
    Par freud dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 12h14
  5. Condition dans WHERE
    Par portu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/02/2007, 11h31

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