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

Langage SQL Discussion :

Utilité des index


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de bouchra19
    Femme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 76
    Points
    76
    Par défaut Utilité des index
    Bonjour/Bonsoir tout le monde

    J'arrive pas à saisir l'utilité des index, je veux dire dans quel cas on les utilise?

    et s'il y a un exemple ça sera super

    Merci d'avance pour vos réponses
    Il n'est jamais trop tard pour apprendre

  2. #2
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Plusieurs posts de SQLPro en parlent, par exemple cette 1ere lecture. Sinon, il y a tout plein d'articles intéressants disponibles via .

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    En faisant une métaphore :

    lorsque tu cherches un mot dans, une citation dans un livre, préfère-tu relire le livre depuis le début, ou allez regarder à la fin du livre l'index qui permet de le retrouver du premier coup ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #4
    Membre régulier Avatar de bouchra19
    Femme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 76
    Points
    76
    Par défaut
    en fait je comprends tout ça

    mais ils me paraissent inutiles puisqu'il y a la commande select qui peut le faire avec plus de précision et plus rapidement
    en plus, les index se mettent à jour à chaque fois qu'on ajoute ou modifie quelque chose dans la table, et par conséquent ils ralentissent la mémoire
    Il n'est jamais trop tard pour apprendre

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Citation Envoyé par bouchra19 Voir le message
    il y a la commande select qui peut le faire avec plus de précision et plus rapidement
    Certainement pas, SELECT utilise ou non les index, mais pour cela il faut qu'ils soient présents ! et c'est leur utilisation qui fait que le SELECT est rapide, ou non.

    Citation Envoyé par bouchra19 Voir le message
    les index se mettent à jour à chaque fois qu'on ajoute ou modifie quelque chose dans la table, et par conséquent ils ralentissent la mémoire
    oui, mais on peut les désactiver le temps de l’opération, mais s'ils ne sont pas réactivés, les conséquences seront sur le SELECT ...
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Membre régulier Avatar de bouchra19
    Femme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 76
    Points
    76
    Par défaut
    ok je comprends (plus au moins )

    merci pour vos réponses
    Il n'est jamais trop tard pour apprendre

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouchra19 Voir le message
    ok je comprends (plus au moins )

    merci pour vos réponses
    En fait, ce que tu n'as pas saisi (au début du topic en tout cas), c'est que les index, tu les utilises implicitement.

    Si tu as une table sur la table "personne (id, nom, prenom, age)" et deux index : idx1(id) et idx2(nom, prenom)

    Voici quelques scénario :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from personne where id = 586;
    => Le SGBD va lire automatiquement l'index idx1, et ainsi retrouver très rapidement la ligne correspondant à l'id 586.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from personne where nom = 'Dupont' and prenom = 'Lucien';
    => Le SGBD va lire automatiquement l'index idx2, et ainsi retrouver très rapidement les lignes correspondant aux personnes appenées ainsi

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from personne where age = 35;
    => Le SGBD va lire l'ensemble de la table pour trouver celles dont l'age est le bon.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from personne where age = 35 order by nom;
    => Le SGBD va lire l'ensemble de l'index idx2 (car il est trié comme l'ordre de tri, ce qui évite de faire un tri sur le résultat), et filtrer les lignes "manuellement", quand elles ont le bon age.

    L'utilisation des index est implicite, et c'est le SGBD qui choisi pour toi.

    On arrive donc face à ce genre de situations :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from personne where nom = 'Dupont' and prenom = 'Lucien' and id between 1000 and 2000;
    => Qui prendre ? idx1 ou idx2 ? Ca dépend des statistiques des index, donc de tes données. Si tu as 10000 Lucien Dupont dans ta table, alors idx1 sera utilisé (puisqu'au plus, le SGBD va lire 1000 lignes pour filtrer les id ensuite). En revanche, si tu en a 2, c'est idx2 qui sera lu, puisque tu liras au plus 2 lignes, puis filtrer les noms et prénoms ensuite.

    On se rend compte que non seulement c'est implicite, et à la discrétion du SGBD, mais qu'en plus le choix des index dépend à la fois des valeurs des données contenues dans la table, et des valeurs contenues dans les filtres de ta requête.

    Et là, on se rend compte de la grande puissance de la chose : au lieu d'appliquer toujours la même règle immuable qui est bonne pour 80% des cas et catastrophique pour les 20% restants, le SGBD va toujours choisir la meilleure solution.
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Membre régulier Avatar de bouchra19
    Femme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 76
    Points
    76
    Par défaut
    Merci beaucoup StringBuilder pour vos explications

    c'était le mot clé "implicitement" qui me fallait pour comprendre

    Maintenant tout est devenu clair

    Merci encore
    Il n'est jamais trop tard pour apprendre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] utilité d'indexation des tableaux
    Par fraisa1985 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/07/2008, 14h46
  2. Utilité des index et mesure de performances
    Par bruce-willis dans le forum SQL
    Réponses: 8
    Dernier message: 04/06/2008, 14h56
  3. utilité des index
    Par gforce dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/04/2006, 16h08
  4. [POSTGRESQL] Utilité des index ?
    Par mic79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/04/2006, 15h19
  5. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 16h11

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