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

Optimisations SGBD Discussion :

Estimation de coût (jointure par hachage)


Sujet :

Optimisations SGBD

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. jointure par hachage
    Par yarab dans le forum Optimisations
    Réponses: 0
    Dernier message: 16/07/2011, 20h49
  2. jointure par hachage
    Par sitws dans le forum Optimisations
    Réponses: 6
    Dernier message: 18/02/2010, 18h25
  3. Quelques questions à soumettre coté jeu par navigateur
    Par myWotA dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 03/02/2007, 10h08
  4. Estimation du coût d'un logiciel
    Par webrider dans le forum Juridique
    Réponses: 6
    Dernier message: 04/10/2006, 15h18
  5. recherche de jointure par requête
    Par vacknov dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2006, 22h21

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