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

 MySQL Discussion :

index ou non ?


Sujet :

MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut index ou non ?
    Bonjour,

    J'ai un espace membres.
    une personne ouvre un compte (chef d'équipe). L'id_equipe est la valeur de l'id_user du chef d’équipe. Il ouvre ensuite jusqu'à 5 comptes(coéquipier) qui prennent en valeur id_equipe la valeur de l'id_user du chef d’équipe.
    La raison à cela est que le chef d'équipe a accès à toutes les infos de tous ses membres. Chose qui n'est pas possible pour les membres qui n'ont accès qu'à leurs informations.
    Ci-dessous, une partie de ma bdd.
    Le chef d’équipe va créer ses fournisseurs, les catégories, les produits. et chacun des coéquipiers va créer ses contacts.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    user: id_user, id_equipe, nom_user, prenom_user........
    contacts: id_contact, id_user, id_equipe, nom_contact, prenom_contact......
    fournisseur: id_fourn, id_user, id_equipe, nom_fourn.....
    categorie: id_cat, id_equipe, nom_cat
    produit: id_prod, id_equipe, id_cat, nom_prod, ref_prod, ht_prod
    bdc: id_bdc, id_equipe, id_produit, qte_prod, ht_bdc, num_bdc....
    mail: id_mail, id_user_exp, id_user_dest, mess_mail, lu_mail
    agenda: id_agenda, id_user, id_equipe, debut_agenda, fin_agenda, mess_agenda
    Je cherche à comprendre l’intérêt des index dans la conception de ma bdd.
    Sachant que les index peuvent ralentir les requêtes de INSERT, UPDATE ou DELETE. Et que dans mon cas, il y a autant de modifications que de simples lectures.
    Sur quelles colonnes à votre avis est il intéressant de mettre un index.
    Merci de votre aide et explication.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Les index n'ont aucun rôle dans la conception. Il s'agit simplement d'optimiser sans modifier la conception.

    Tout dépend des volumes et de la sélectivité, mais globalement les index vont ralentir marginalement les requêtes de modification (qui portent le plus souvent sur une seule ligne) et accélérer spectaculairement les requêtes de sélection (qui doivent fouiller dans l'intégralité des tables).

    En première approche, tu dois indexer toutes les colonnes de jointures, ainsi que celles sur lesquelles il y aura fréquemment des filtres, surtout des filtres très sélectifs. Par exemple, trouver un 'jimmo' parmi 100 000 abonnés est un filtre très sélectif, pour lequel l'effet de l'index sera spectaculaire. A l'inverse, filtrer sur le sexe parmi une population à peu près équilibrée est peu sélectif, l'index serait inutile voir contre-productif (en vérité, MySQL n'utilise normalement pas les index si la sélectivité estimée est supérieure à 30%).
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    En fait, je dirai plutôt que les index vont même certainement améliorer les performances pour les update et delete, surtout dans votre cas.

    Comme l'a indiqué Antoun, les index sont a voir bien après a modélisation, qui elle en revanche doit être bien soignée, vous n'avez pas indiqué votre besoin, mais j'ai l'impression qu'il y aurait des choses à revoir dans votre modèle.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    En fait, je dirai plutôt que les index vont même certainement améliorer les performances pour les update et delete, surtout dans votre cas.
    aieeeuuuuu a raison, car la base va plus facilement trouver les lignes à modifier ou supprimer.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Merci de votre participation,
    je vais donc indexer id_user et id_equipe.
    Je dois aussi indexer toutes les jointures?
    Et lorsque je lis partout que les index ralentissent les opérations de modification de la table(en particulier insert et delete car la table d'index doit se remettre à jour), on parle de quel genre de ralentissement?

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par jimmo Voir le message
    Merci de votre participation,
    je vais donc indexer id_user et id_equipe.
    Je dois aussi indexer toutes les jointures?
    Sauf celles dont tu préfères qu'elles soient lentes
    Citation Envoyé par jimmo Voir le message
    Et lorsque je lis partout que les index ralentissent les opérations de modification de la table(en particulier insert et delete car la table d'index doit se remettre à jour), on parle de quel genre de ralentissement?
    Le genre négligeable.

    En fait, tout est une question de type d'utilisation. En utilisation classique (on va dire OLTP), tu vas insérer une ligne à la fois. Mettons que l'insertion dure deux millièmes de seconde sans index, et quatre millièmes avec index. Proportionnellement, c'est un ralentissement important. Concrètement, deux millièmes de secondes en plus, ça n'a pas la moindre importance par rapport à ce que ça va permettre de gagner en performance de restitution.

    Dans des utilisations de données en masse, type OLAP, là oui, ça commence à avoir du sens de dire que les index ralentissent l'insertion. Si tu insères un million de lignes en 5 minutes et que l'index te fais passer à 10 minutes, ça commence à poser problème. En général, on désactive l'index avant l'insertion de masse pour le reconstruire après l'insertion, c'est beaucoup plus rapide. C'est aussi plus logique : s'il y a un million d'insertions, ça ne sert à rien de les tracer une par une, autant attendre le résultat final et le ré-indexer.

    Je précise que mes chiffres ne s'appuient sur rien, c'est juste pour illustrer l'idée.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Je te remercie, tout est très clair maintenant. Je m'y mets et reviendrai en cas de soucis
    Merci et bonne journée

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par jimmo Voir le message
    une personne ouvre un compte (chef d'équipe). L'id_equipe est la valeur de l'id_user du chef d’équipe. Il ouvre ensuite jusqu'à 5 comptes(coéquipier) qui prennent en valeur id_equipe la valeur de l'id_user du chef d’équipe.
    Et que se passera -t- il si l'équipe change de chef d'équipe ? ou que temporairement, une équipe n'ait pas de chef ?
    Il serait nettement préférable d'attribuer à l'équipe son propre identifiant, et de modéliser une relation à date entre une équipe et une personne, matérialisant ainsi un ou plusieurs chefs d'équipe successifs.

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

Discussions similaires

  1. Oracle8i Index Bitmap non utilisé
    Par persam dans le forum SQL
    Réponses: 2
    Dernier message: 20/06/2008, 15h05
  2. Index ou non ?
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/12/2006, 10h42
  3. Select list me donne l'index et non la valeur
    Par beegees dans le forum ASP
    Réponses: 3
    Dernier message: 07/09/2006, 09h21
  4. index.php non interprété directement
    Par Celeborn dans le forum Apache
    Réponses: 3
    Dernier message: 04/07/2006, 14h21
  5. index.html non reconnue
    Par nickko dans le forum Apache
    Réponses: 3
    Dernier message: 22/06/2005, 21h45

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