web-dev-qa-db-fra.com

Quels sont les inconvénients des index dans les tables de base de données?

Existe-t-il une raison pour laquelle je ne devrais pas créer d'index pour chacune de mes tables de base de données, afin d'améliorer les performances? Il semblerait qu'il doit y avoir une ou plusieurs raisons sinon toutes les tables en auraient automatiquement une par défaut.

J'utilise MS SQL Server 2016.

5
Stpete111

Un index sur une table n'est pas un gros problème. Vous avez automatiquement un index sur les colonnes (ou combinaisons de colonnes) qui sont des clés primaires ou déclarées comme uniques.

Il existe des frais généraux pour un index. L'index lui-même occupe de l'espace sur le disque et dans la mémoire (lorsqu'il est utilisé). Donc, si l’espace ou la mémoire sont des problèmes, trop d’index peut poser problème. Lorsque des données sont insérées/mises à jour/supprimées, l'index doit être conservé ainsi que les données d'origine. Cela ralentit les mises à jour et verrouille les tables (ou une partie des tables), ce qui peut affecter le traitement de la requête.

Un petit nombre d'index sur chaque table est raisonnable. Celles-ci doivent être conçues en tenant compte de la charge de requête typique. Si vous indexez chaque colonne de chaque table, les modifications de données ralentiraient. Si vos données sont statiques, le problème ne se pose pas. Cependant, consommer toute la mémoire avec des index pourrait être un problème.

14
Gordon Linoff

Au minimum, je recommanderais normalement d’avoir au moins un index par table. Il serait automatiquement créé sur la clé primaire de votre table, par exemple une colonne IDENTITY. Les clés étrangères devraient alors normalement bénéficier d'un index, qui devra être créé manuellement. Les autres colonnes fréquemment incluses dans les clauses WHERE doivent être indexées, en particulier si elles contiennent de nombreuses valeurs uniques. Le bénéfice des colonnes d'indexation, telles que le genre (faible cardinalité) lorsqu'il n'a que 2 valeurs, est discutable. La plupart des tables de mes bases de données ont entre 1 et 4 index, en fonction des données de la table et de la façon dont ces données sont récupérées.

0
Tim Newton