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

Décisions SGBD Discussion :

Performance Jointure


Sujet :

Décisions SGBD

  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Par défaut Performance Jointure
    Bonjour,

    J'ai une question pour les plus expérimentés sur les SGBDR et les requètes SQL.
    Lors d'une jointure entre 2 tables exemple: SELECT * FROM T1,T2 WHERE T1.ID=T2.ID
    il semblerait que la perf dépende du nbre d'eregistrement dans les 2 tables T1 et T2 mais aussi et c'est moins intuitif d'une disymétrie du nombre d'enregistrements... je m'explique la table T1 200 lignes. La table T2 1500000 lignes.

    J'ai eu a faire ou plutot à renoncer à ce genre de requète dans une telle situation sous Access2000 (je sais c'est pas un SGBDR, mais bon il s'en tire pas mal pour une utilisation monoposte et personnelle)

    Avez vous un avis, une idée, une explication sur la question?
    Merci.
    JF

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    et bien plus il y a de combinaison différente pour associer les enregistrements plus c'est lent... ça me parait logique non ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Par défaut
    Dépend de trois choses principales :
    1 > Les différentes stratégies d'accés que le SGBD est capable de mettre en oeuvre.
    2 > L' "INTELLIGENCE" de l'optimiseur déterminant la strategie d'accés aux données dans ce cas précis.
    3 > La bonne indexation des tables

    Pour le 1 et 2, il est sur qu'ACCESS n'est pas DB2 ou ORACLE
    Pour le 3, c'est toi qui t'y colle

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut Re: Performance Jointure
    Oui comme le dit orafrance ce n'est pas comme vous le dite la disymétrie du nombre d'enregistrement entre les deux tables qui influe sur les performances mais plutot le nombre de correspondance qu'il y a dans la grosse table pour un élément de la petite table.

    En d'autre termes s'il y avait une correspondance 1 pour 1 (et donc il y aurait 1 499 800 enregistrements de la grosse table sans correspondances avec ceux de la petite table) votre requete serait immédiate (du moins elle devrait l'être).

    Or votre problème c'est que pour un enregistrement de votre petite table il doit y avoir des dixaines ou centaines de millers d'enregistrements correspondant dans votre grosse table. Et donc le résultat de la jointure est ennorme.

    Dans un SGBD client/serveur l'exécution de la requete est immédiate ce qui est long c'est de parcourir tout le résultat (fetch).

  5. #5
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Par défaut Ok
    Je sais qu'il y a des requetes à favoriser pour obtenir le meilleur temps de réponse et j'avais compris suite à des retours d'expétriences que les fortes disymétries entre 2 tables étaient très couteuses.
    Il est vrai et j'aurai pu y réfléchir que, par exemple, pour des requètes imbriqués, en général (vous me direz si je me trompe) on commence par mettre en premier
    ( celle qui se situe au bout du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT IN( SELECT IN(... ici
    ))
    )
    la requête qui réduit le plus le nombre d'enregistrements retournés

    Donc dans le cas précédent ca semble normal que ce soit le nombre de correspondances à créer et non la disymétrie qui soit couteuse.

    A vérifier:
    je vais faire un essai pour voir ce que cela peut donner:
    Essai 1:
    - dans une table 200 enregistrements avec dans l'autre table une correspondance de 7500 enregistrements
    Essai 2:
    - 200 enregistrements dont seul correspond avec 7500 enregistrements de la 2éme table
    Essai 3:
    - 200 enregistrements avec correspondance 1 pour 1 vers la 2ème table.

    Je vais tester ca sous Access et je poste mes maigres conclusions
    Merci
    JF

Discussions similaires

  1. [MySQL-5.5] Performance Jointure VS view
    Par everest31 dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/03/2013, 17h49
  2. Réponses: 1
    Dernier message: 14/10/2008, 12h08
  3. [MySQL] performance des jointures
    Par Bibicmoi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/10/2006, 06h44
  4. [SQL Server] Jointure entre 2 tables et performances
    Par rmeuser dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/04/2006, 10h12
  5. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20

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