Aikido

Pourquoi éviter les index redondants dans les bases de données : optimisation du stockage et des performances en écriture

Performance

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 : SQL

Introduction

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.

FAQ

Vous avez des questions ?

Comment identifier les index redondants dans ma base de données ?

Interrogez les tables système de votre base de données pour obtenir la liste de tous les index. Pour PostgreSQL, utilisez la vue pg_indexes. Pour MySQL, utilisez SHOW INDEX FROM table_name. Recherchez les index dont l'un est un préfixe d'un autre (email vs email+status) ou dont plusieurs index couvrent les mêmes colonnes dans des ordres différents.

Quand un index à colonne unique n'est-il pas redondant avec un index composite ?

Quand la sélectivité des requêtes est importante. Si vous n'interrogez fréquemment que la deuxième colonne d'un index composite, cette requête ne peut pas utiliser l'index de manière efficace. Un index sur (statut, courriel) n'aidera pas les requêtes filtrant uniquement par courriel. Cependant, un index sur (email, statut) peut servir les requêtes portant uniquement sur l'email.

Comment les index redondants affectent-ils les performances des requêtes ?

Minimalement pour les lectures, significativement pour les écritures. Le planificateur de requêtes peut choisir entre des index redondants, mais le temps d'exécution est similaire. Cependant, chaque écriture (INSERT, UPDATE, DELETE) doit mettre à jour tous les index, ce qui multiplie les opérations d'entrée/sortie. Pour les tables à forte densité d'écriture, la suppression des index redondants peut améliorer le débit de 20 à 50 %.

Dois-je supprimer tous les index à colonne unique si j'ai des index composites ?

Pas toujours. Si l'index d'une seule colonne est très sélectif et qu'il est fréquemment interrogé seul, conservez-le. Utilisez les statistiques d'interrogation de la base de données pour savoir quels index sont réellement utilisés. Supprimez les index dont l'utilisation est nulle ou très faible. Les bases de données modernes suivent l'utilisation des index dans les vues du système.

Obtenir la sécurité gratuitement

Sécurisez votre code, votre cloud et votre environnement d'exécution dans un système central.
Trouvez et corrigez rapidement et automatiquement les vulnérabilités.

Aucune carte de crédit n'est requise | Scanner les résultats en 32sec.