Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nombre de ligne parcouru

avec table indexé et sans indexé

    29 septembre 2010 à 20:17:31

    Bonjour,

    j'ai une question simple :

    imaginons les tables Individu et Film. Il y a 10 000 lignes dans la table Individu et 12 000 pour film.

    si je fait la requête :

    SELECT * FROM Individu, Film WHERE realisateur = numIndividu and nomIndividu = 'HOMER'

    (realisateur est dans la table FILM et les autres attributs dans Individu).

    Combien lignes serons parcouru sans Indexage et pourquoi ? je sais que il y a 24 000 mais je ne comprend pas pourquoi.

    Et dans le cas où on index Realisateur et NomIndividu je ne vois pas comment on pourrait deviner le nombre de lignes qui serons parcourus.

    Merci de bien vouloir m'aider.
    • Partager sur Facebook
    • Partager sur Twitter
      29 septembre 2010 à 22:12:30

      Je préfère te filer le lien plutôt que de t'écrire une explication boiteuse :

      http://fr.wikipedia.org/wiki/Index_(base_de_donn%C3%A9es)
      • Partager sur Facebook
      • Partager sur Twitter
        30 septembre 2010 à 10:41:04

        bonjour,
        la commande explain (avec MySQL, avec Oracle, ...) permet de connaître le nombres de lignes accédées ...
        Avec MySQL QueryBrowser ou WorkBench pour MySQL il y a un bouton pour l'exécuter.
        Cette commande permet donc de tester des SELECTs avec plusieurs configurations d'optimisation (Création d'index, ...).
        • Partager sur Facebook
        • Partager sur Twitter
          30 septembre 2010 à 14:07:07

          Oui, mais enfait c'est un exo fictif donc le nombre de lignes etc sont invénté, donc pas moyen de vérifier dans une base de données :p
          • Partager sur Facebook
          • Partager sur Twitter
            30 septembre 2010 à 15:23:09

            re,
            sans indexation une table est parcourue séquentiellement. Le nombre d'accès sera de nClusters/2 (Calcul de probabilité pris en compte). Le nombre de clusters utilisés par la table dépend de la taille de l'enregistrement et de la taille du cluster.
            Il faut donc connaître la taille du cluster géré par le SGBDR. La taille de l'enr est facile à calculer à la louche.
            Admettons un cluster de 1024 octets et un enregistrement de 102 octets.
            Donc dans l'exemple avec 10000 individus cela fait 500 accès pour trouver un réalisateur.
            La formule de Wiki citée donne 100 accès avec un index. Mais elle n'est pas valable pour tous les SGBDR. Certains sont plus rapides.
            Ensuite il faut faire le même type de calcul sur la table jointe ...
            • Partager sur Facebook
            • Partager sur Twitter
              1 octobre 2010 à 0:30:48

              En réécrivant la requête correctement :

              SELECT * FROM 
              individus i
              JOIN films f ON (f.realisateur_id=i.id)
              WHERE i.nom = 'HOMER'
              


              Tu parcours individus entièrement vu que t'as pas d'index et tu filtres les lignes qui contiennent HOMER. Ensuite il va falloir trouver les lignes de la table films qui correspondent. Soit tu as un index sur films(realisateur_id) et le problème est réglé, soit tu parcours entièrement la table films aussi, et à chaque ligne tu vérifies que realisateur_id est dans la liste que t'as trouvé à l'étape précédente.
              • Partager sur Facebook
              • Partager sur Twitter

              Nombre de ligne parcouru

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown