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 se produisent 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 avec cinq index superposés sur des colonnes similaires subit 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 la performance : 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 en termes de requêtes. Une table avec trois index redondants sur user_id triple la surcharge 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 avec des index inutiles peuvent gaspiller des gigaoctets de stockage.
Complexité de la maintenance : Plus d'index signifient 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. Les planificateurs de requêtes ont plus d'options à évaluer, ce qui peut potentiellement conduire à des plans d'exécution sous-optimaux.
Exemples de code
❌ Non conforme :
-- Index redondants sur la table users
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_email_status ON users(email, status);
CREATE INDEX idx_users_created ON users(created_at);
CREATE INDEX idx_users_created_status ON users(created_at, status);
-- Les index à colonne unique sont redondants car
-- les index composites peuvent servir les mêmes requêtes
Pourquoi c'est incorrect : L'index sur l'email est redondant car idx_users_email_status commence par e-mail et peut gérer des requêtes filtrant uniquement par e-mail. 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 users
CREATE INDEX idx_users_email_status ON users(email, status);
CREATE INDEX idx_users_created_status ON users(created_at, status);
-- Les index composites peuvent servir des requêtes sur leurs colonnes de préfixe
-- Les requêtes sur l'email seul utilisent idx_users_email_status
-- Les requêtes sur created_at seul utilisent idx_users_created_status
Pourquoi c'est important : Deux index composites servent tous les modèles de requête tout en éliminant la redondance. Les requêtes filtrant par e-mail utilisent uniquement le premier index, et les requêtes filtrant par créé_le utilisent uniquement le second. Les performances d'écriture s'améliorent car seuls deux index nécessitent des mises à jour au lieu de quatre.
Conclusion
Auditez régulièrement les index de votre base de données pour identifier les redondances. 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, éliminant ainsi le besoin d'index séparés à colonne unique dans la plupart des cas.
.avif)
