Base MySQL et Index

Nouveau WRInaute
Bonjour à tous,

J'ai quelques question concernant les Index dans une table SQL.

Est-il utile de les mettre sur des champs enum (Par exemple sur un champ "Actif" qui détermine si un compte utilisateur est actif ou non) ? Car je me demande si ça pourrait accélérer le listage des comptes Actifs, ou au contraire si pour un enum c'est pas conseillé.

De même, est-ce "grave" si une table comporte plus de 5 Index environ (si j'en met un peu à tout va) ?

Est-ce utile en gros de mettre un Index sur chaque colonne que je risque d'utiliser comme filtre lors d'une requete (une recherche dans la base de données par exemple) ?

Merci si vous avez des conseils
 
Nouveau WRInaute
Salut Madmatt,

Moins tu auras d'index plus ils seront performants.
Tu dois créer ton index sur le champ très fréquemment utilisé dans tes selects.
Le champ où tu veux placer ton index doit avoir une fréquence d'échantillonage élevé (idéalement un champ unique), donc ça sert à rien sur un champ enum qui déduction a une petite liste de valeur

Je suis pas DBA alors tout ce que je dis est à prendre au conditionnel
 
WRInaute accro
MadMatt a dit:
Est-il utile de les mettre sur des champs enum (Par exemple sur un champ "Actif" qui détermine si un compte utilisateur est actif ou non) ? Car je me demande si ça pourrait accélérer le listage des comptes Actifs, ou au contraire si pour un enum c'est pas conseillé.

Oui, ça peut effectivement être utile. Maintenant demande-toi exactement quelle est la requête qui va utiliser cet index, si cette requête est exécutée souvent, et si elle aurait besoin d'autres choses. Si la requête n'est pas exécutée souvent, tu peux probablement te passer de l'index. Si la requête liste (par exemple) les 10 derniers compte actifs, en plus de l'état actif/inactif, tu peux avoir intérêt à mettre la date (celle qui compte pour "10 derniers") dedans. Comme ça il n'a pas besoin de parcourir tout l'index pour trouver 10 lignes.

MadMatt a dit:
De même, est-ce "grave" si une table comporte plus de 5 Index environ (si j'en met un peu à tout va) ?

En lecture, un index ne gêne pas (ou très très peu, il faut juste décider s'il est utile de s'en servir ou pas). Par contre ça implique qu'à chaque écriture (insertion/mise à jour/supression) il va falloir mettre à jour tous ces index. Si tu écris très peu et lis beaucoup avec beaucoup de requêtes différentes qui ont besoin d'index différents, ajoute tous les index que tu veux. Si au contraire tu écris beaucoup, limite le nombre d'index.

MadMatt a dit:
Est-ce utile en gros de mettre un Index sur chaque colonne que je risque d'utiliser comme filtre lors d'une requete (une recherche dans la base de données par exemple) ?

A moins que tu ne permettes une recherche sur n'importe quel critère, il vaut mieux adapter chaque index aux requêtes spécifiques que tu peux faire, avec éventuellement plusieurs colonnes dans chaque index.

NB: je n'utilise jamais mysql mais uniquement postgresql, donc je ne suis pas 100% certain que mysql soit capable d'utiliser des index multi-colonnes dans tous les cas de figure, mais je suppose et j'espère qu'il sait le faire!

Jacques.
 
Nouveau WRInaute
Merci, c'était parfaitement ce que je cherchais comme réponse. Je vais appliquer vos conseils (je suis en train de reconcevoir la base de données, mieux vaut tard que jamais).

Bonne journée
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut