Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
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 01/12/2004, 18h46   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 40
Points : 12
Points : 12
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
jflebegue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 19h02   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et bien plus il y a de combinaison différente pour associer les enregistrements plus c'est lent... ça me parait logique non ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 19h03   #3
Membre du Club
 
Inscription : avril 2004
Messages : 54
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 54
Points : 59
Points : 59
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
papounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 19h40   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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).
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 22h41   #5
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 40
Points : 12
Points : 12
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 :
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
jflebegue est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h33.


 
 
 
 
Partenaires

Hébergement Web