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 :

Question de performance


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Question de performance
    De manière générale, lequel est le plus performant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT champ1, champ2, ... FROM ... 
    INNER JOIN ... ON ........
    INNER JOIN ... ON ........
    INNER JOIN ... ON ........
    INNER JOIN ... ON ........
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champ1,
    (SELECT champ2 FROM ...)
    FROM ...
    Et comment est-ce si je dois utiliser des fonctions d'aggrégation genre SUM, GROUP BY, ORDER BY, ...

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Pour éviter les mauvaises surprise utilisez plutôt la 1ere solution.


    La 2eme pourra être plus rapide dans certain cas, mais vraiment catastrophique dans d'autre ...


    Pour les fonctions d'aggrégation lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/ensembles/

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Ok. C'est dommage, c'est tellement plus simple avec la 2ème solution !
    Merci.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Si vous avez un cas réel à proposer on pourra l'étudier.

    Là vous introduisez le sujet "d'une manière général" donc je répond de la même façons

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Notez que la traduction de la première syntaxe (requête scalaire) vers la seconde se traduit avec des LEFT JOIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    With Table1 (col1, col2) as
    (
    select 1, 'T1 - 1' union all
    select 2, 'T1 - 2'
    )
      ,  Table2 (col1, col2) as
    (
    select 1, 'T2 - 1'
    )
    select T1.col2 as col2_T1
         , (select T2.col2 from Table2 as T2 where T2.col1 = T1.col1) as col2_T2
      from Table1 as T1;
     
    col2_T1 col2_T2
    ------- -------
    T1 - 1  T2 - 1
    T1 - 2  NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        select T1.col2 as col2_T1
             , T2.col2 as col2_T2
          from Table1 as T1
    inner join Table2 as T2
            on T2.col1 = T1.col1;
     
    col2_T1 col2_T2
    ------- -------
    T1 - 1  T2 - 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        select T1.col2 as col2_T1
             , T2.col2 as col2_T2
          from Table1 as T1
     left join Table2 as T2
            on T2.col1 = T1.col1;
     
    col2_T1 col2_T2
    ------- -------
    T1 - 1  T2 - 1
    T1 - 2  NULL
    Attention aussi aux cardinalités, les requêtes scalaires n'acceptent que des associations (0,1).

Discussions similaires

  1. Utilisartion d'une arraylist dans une boucle, question de performance
    Par Djobird dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 20/07/2007, 17h28
  2. [WPF] Encore les images - question de performances
    Par BruceWayne dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 13/06/2007, 13h23
  3. question de performance : transtypage ou pas ?
    Par brice01 dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 19/03/2007, 16h04
  4. [question de performance]
    Par viny dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/08/2005, 22h48
  5. Question de performance
    Par davidx dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2003, 22h55

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