index ou non

Petit nouveau ! | 9 Messages

04 juil. 2015, 13:32

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.
Le chef d’équipe va créer ses fournisseurs, les catégories, les produits. Et chacun des coéquipiers va créer ses contacts.
Ci-dessous, une partie de ma bdd.
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.

Mammouth du PHP | 688 Messages

04 juil. 2015, 15:21

id_user et/ou id_equipe selon que tu demandes surtout des infos du membre ou de l'équipe.
l'important, c'est que le select est un index évitant de devoir parcourir toute la table, pas l'éventuel ralentissement des requêtes en écriture.
dans phpmyadmin, utiliser le explain de la requête sql pour vérifier que l'index est correctement utilisé.

Petit nouveau ! | 9 Messages

04 juil. 2015, 17:28

Merci de ta réponse tof73.
J'avais effectivement pensé à ces index. Mais comme je lis partout qu'un index ralenti les requêtes d'insertion, de modification et de suppression, j’étais pas sur de l’intérêt de ces index... Car comme je l'ai dis plus haut, 50% des requêtes seront des SELECT et 50% des INSERT et UPDATE.
Et l'index je le met sur tous les id_user et/ou id_equipe de toutes les tables? Car effectivement 100% de mes requêtes auront en condition WHERE id_user/id_equipe = :id_user / :id_equipe