Règle
Éviter redondante base de données redondants.
Le chevauchement des index de base de données de base de données gaspille
stockage et ralentir ralentissent écrit.
Langages pris en charge : SQLIntroduction
Les index redondants apparaissent lorsque plusieurs index couvrent les mêmes colonnes ou lorsqu'un index est un préfixe d'un autre. Chaque index consomme de l'espace disque et doit être mis à jour lors des opérations INSERT, UPDATE et DELETE. Une table comportant cinq index qui se chevauchent sur des colonnes similaires paie cinq fois la pénalité de performance en écriture alors qu'un seul index suffirait pour l'optimisation de la lecture.
Pourquoi c'est important
Impact sur les performances : Chaque index ralentit les opérations d'écriture car la base de données doit mettre à jour tous les index lorsque les données changent. Les index redondants multiplient ce coût sans apporter d'avantages aux requêtes. Une table comportant trois index redondants sur user_id triple la charge d'écriture alors qu'un seul index est utilisé.
Coûts de stockage : Les index consomment de l'espace disque proportionnellement à la taille des colonnes indexées et au nombre de lignes. Les index redondants gaspillent de l'espace de stockage qui pourrait être utilisé pour des données réelles ou des index utiles. Les grandes tables comportant des index inutiles peuvent gaspiller des gigaoctets d'espace de stockage.
Complexité de la maintenance : Plus d'index signifie plus d'objets à surveiller, à analyser et à maintenir. Les administrateurs de bases de données passent du temps à optimiser des index qui n'apportent aucune valeur ajoutée. Les planificateurs de requêtes ont plus d'options à évaluer et peuvent choisir des plans d'exécution sous-optimaux.
Exemples de code
❌ Non conforme :
-- Index redondants sur la table utilisateurs
CREER INDEX idx_users_email SUR utilisateurs(email) ;
CREER INDEX idx_users_email_status SUR utilisateurs(email, statut) ;
CREER INDEX idx_users_created SUR utilisateurs(created_at) ;
CREER INDEX idx_users_created_status SUR utilisateurs(created_at, status) ;
-- Les index à colonne unique sont redondants parce que
-- les index composites peuvent servir les mêmes requêtes
Pourquoi c'est mal : L'index sur le courrier électronique est redondant car idx_users_email_status commence par courriel et peut traiter les requêtes filtrant uniquement par courrier électronique. De même, idx_users_created est redondant avec idx_users_created_status. Chaque insertion ou mise à jour de cette table met à jour quatre index alors que deux suffiraient.
✅ Conforme :
-- Index optimisés sur la table utilisateurs
CREER INDEX idx_users_email_status SUR utilisateurs(email, statut) ;
CREER INDEX idx_users_created_status SUR utilisateurs(created_at, status) ;
-- Les index composites peuvent servir des requêtes sur leurs colonnes préfixes
-- Les requêtes sur le seul email utilisent idx_users_email_status
-- Les requêtes sur seulement created_at utilisent idx_users_created_status
Pourquoi cela est-il important ? Deux index composites permettent de répondre à tous les types de requêtes tout en éliminant les redondances. Les requêtes filtrées par courriel utilise seul le premier index, et les requêtes filtrant par date_de_création n'utilise que le second. Les performances en écriture s'améliorent car seuls deux index doivent être mis à jour au lieu de quatre.
Conclusion
Contrôlez régulièrement les index de votre base de données afin d'identifier ceux qui sont redondants. Supprimez les index qui sont des préfixes d'autres index ou qui dupliquent la couverture. Les index composites peuvent servir les requêtes sur leurs colonnes principales, ce qui élimine dans la plupart des cas la nécessité de disposer d'index distincts pour une seule colonne.
.avif)
