Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    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

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 747
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 747
    Points : 22 930
    Points
    22 930

    Par défaut

    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 !

  3. #3
    Invité de passage
    Inscrit en
    octobre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •