Précédent   Forum du club des développeurs et IT Pro > Bases de données > Décisions SGBD > Optimisations
Optimisations Forum de conseils pour les optimisations des performances SGBD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/10/2010, 00h27   #1
megainfo
Invité de passage
 
Inscription : octobre 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 8
Points : 1
Points : 1
Par défaut Estimation de coût (jointure par hachage)

Bonjour,

je travail sur les DW et j'aimerai bien estimer le coût de certain type de requêtes ( en nombre E/S). par exemple, si on a deux relations R1,R2

R1(ID,Nom) et R2(IDcmd,DateDeCommande,Client)

comment on estime le coût de cette requête sachant que la jointure est une hash join :

Code :
1
2
3
SELECT Nom,DateDeCommande
FROM R1,R2 
WHERE R1.ID=R2.Client AND R2.Nom='Dupond'
la formule qui calclul de jointure par hachage est 3*(|R1|+|R2|) mais dans cette requête je ne sais pas cmt l'appliquer.

Merci
megainfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2010, 08h36   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 568
Points : 25 568
Envoyer un message via MSN à CinePhil
1) Vous devriez utiliser la syntaxe normalisée pour les jointures depuis 1992.
2) En SQL, les valeurs textuelles s'écrivent entre apostrophes et pas entre guillemets. 3) 3) Il est préférable de préfixer les colonnes du nom -ou mieux, de l'alias quand le nom de la table est plus long que dans votre exemple - afin de lever toute ambiguïté sur la provenance de ces colonnes.
4) Dans votre WHERE, pour faites figurer une table Client qui s'appelle en réalité R1 dans le FROM et dans votre message.

Code :
1
2
3
4
SELECT R1.Nom, R2.DateDeCommande
FROM R1
INNER JOIN R2 ON R2.Client = R1.ID
WHERE R1.Nom = 'Dupond'
Normalement, avec une telle requête, le SGBD devrait commencer par chercher l'identifiant du ou des client(s) 'Dupond', ce qui réduira considérablement le nombre de lignes à traiter, potentiellement une seule.
Puis il fera la jointure entre les deux tables en utilisant l'index de la clé étrangère posé sur R2.Client et ne parcourra donc que le nombre de lignes correspondant à l'ID du client dans la table R2.

Je ne sais pas si ça répond partiellement à la question sur le calcul de la jointure par hachage dont je ne connais pas le mécanisme particulier.

À moins que je sois M. Jourdain en ce domaine ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2010, 20h20   #3
megainfo
Invité de passage
 
Inscription : octobre 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 8
Points : 1
Points : 1
Merci pour la réponce et les corrections car j'ai pris l'exemple sans le vérifier.

oui effectivement, j'ai tester le oracle et le plan d'exécution montre qu'il fait une lecture (full) de la table R1 et une sélection et projection coté R2 de (IDcmd,Client) du client 'Dupond' qui produira une table R2'.

après il effectuera une jointure (Hash join) entre la table R1 et R2'

donc moi,d'essai de calculer le coût total (en nombre E/S):

Code :
coût_requête =  ( 2*|R1| + |R2|+ |R2'| ) +   (|R1| + |R2'| )
le premier coût entre () c'est le coût d'E/S pour la selection et la projection et le 2ème coût c'est le coût de la jointure.

Est se que c'est juste ou pas !

merci pour votre aide
megainfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h37.


 
 
 
 
Partenaires

Hébergement Web