Quels sont les inconvénients d'avoir de nombreux indices?
Récemment, j'ai accéléré un complexe de requête par un ordre de grandeur en donnant SQLite un bon indice de travailler avec. De tels résultats, je me demande si je devrais l'indice de beaucoup d'autres champs qui sont couramment utilisés pour des Jointures ou des clauses ORDER BY. Mais je ne veux pas entrer trop zélés et avoir l'effet inverse sur moi: je suppose que il doit y avoir quelques raisons pas pour créer des indices, ou de chaque champ sera indexé par défaut.
Je suis en utilisant SQLite dans ce cas, mais bien sûr SGBD indépendant du conseil est la bienvenue.
OriginalL'auteur Andrew Watt | 2009-04-18
Vous devez vous connecter pour publier un commentaire.
Indices de ralentir insertions et mises à jour (qui peut devenir un très sérieux problème avec verrouillage) et le coût de l'espace disque. C'est assez bien.
les inserts ne bénéficient pas d'indices... Mises à jour et Suppressions exigent de trouver la ligne correspondante(s), afin qu'ils profitent des index pour cette étape, mais si vous avez trop d'indices, de même que le bénéfice ne peut être niée. Comme vous le dites, c'est tout un équilibre 🙂
OriginalL'auteur chaos
Index utilisation maximum de l'espace disque pour stocker et prendre le temps de créer et de maintenir. Ceux qui sont inutilisés ne donnent pas toutes les prestations. Si il y a beaucoup de candidat à l'index d'une requête, la requête peut être ralentie par le fait d'avoir le serveur de choisir le "mauvais" pour la requête.
Utiliser ces facteurs pour décider si vous avez besoin d'un indice.
Il est généralement possible de créer des index qui ne seront JAMAIS utilisés - par exemple, l'index et un (not null) champ avec seulement deux valeurs possibles, est presque certainement va être inutile.
Vous devez expliquer votre propre application requêtes pour vous assurer que l'fréquemment effectuées utiliser sensible des indices si possible, et de ne pas créer plus d'indices que nécessaires pour le faire.
OriginalL'auteur MarkR
Afin de tester votre application, vous pouvez mettre "EXPLIQUER le PLAN de REQUÊTE" en face de toute requête que vous exécuter et vérifier les résultats. Il va vous montrer où il est ou n'est pas l'utilisation d'index.
De cette façon, vous pouvez déterminer où vous pourriez utiliser des index et où elle ne serait pas faire une différence.
Sqlite Expliquer
- Je utiliser SqliteSpy de la main de test de la requête qui semblent être la cause du problème.
OriginalL'auteur Jared Miller
Le coût d'un index de l'espace disque est généralement négligeable. Le coût supplémentaire de l'écrit de mise à jour de l'index lors de les changements de table est souvent modérée. Le coût supplémentaire de verrouillage peuvent être graves.
Il dépend de la lecture vs ratio d'écriture sur la table, et sur combien de fois l'indice est en fait utilisé pour accélérer la vitesse d'une requête.
D'accord avec les Démocrates; pour une table étroite, un index non-cluster peut être de taille comparable à la table. Dire d'un indice des coûts de la moitié de l'espace disque de la table elle-même; une table avec six indices est quatre fois plus important sur le disque comme un non indexés. Les index en cluster sont fondamentalement libre.
Non, le coût d'un index dans l'espace disque n'est pas "généralement trivial". Il est possible d'utiliser beaucoup d'espace avec index.
OriginalL'auteur Walter Mitty