118 votes

MySQL - pourquoi ne pas l'indice de chaque domaine?

Récemment, j'ai appris l'émerveillement de l'index et de la performance s'est améliorée de façon spectaculaire. Cependant, avec tout ce que j'ai appris, je n'arrive pas à trouver la réponse à cette question.

Les indices sont très bien, mais pourquoi ne pas quelqu'un index de tous les champs de la table incroyablement rapide? Je suis sûr qu'il y a une bonne raison de ne pas le faire, mais comment environ trois champs dans une trentaine de table de champ? 10 à 30 champ? Où doit-on tracer la ligne, et pourquoi?

135voto

Brian Roach Points 43787

Les indices de la place dans la mémoire vive (RAM); de Trop nombreux ou trop grand, de l'index et de la DB va devoir troquer et à partir du disque. Ils augmentent également insérer et supprimer des temps (chaque indice doit être mis à jour pour chaque morceau de données insérées, supprimé ou mis à jour).

Vous n'avez pas infinie de la mémoire. Faire en sorte que tous les indices d'ajustement dans la RAM = bon.

Vous n'avez pas le temps infini. L'indexation uniquement les colonnes dont vous avez besoin indexé minimise l'insertion/suppression/mise à jour des performances.

30voto

AndyMac Points 465

Gardez à l'esprit que chaque indice doit être mis à jour chaque fois qu'une ligne est mise à jour, insérées ou supprimées. Donc, plus les indices que vous avez, plus le taux de rendement que vous aurez pour les opérations d'écriture.

Aussi, chaque indice prend plus d'espace disque et de mémoire spatiale (quand on l'appelle), de sorte qu'il pourrait ralentir les opérations de lecture (pour les grandes tables). Check this out

10voto

Smandoli Points 3792

Vous devez équilibrer CRUD besoins. L'écriture dans les tables devient lent. Pour savoir où tracer la ligne, qui dépend de la façon dont les données sont effectue (de tri, filtrage, etc.).

2voto

Lionel Jerinho Points 1

L'indexation prendra plus d'espace alloué à la fois de disque et de ram, mais aussi l'amélioration de la performance beaucoup. Malheureusement, lorsqu'il atteint la limite de mémoire, le système de remise de l'espace sur le disque des risques et de la performance. Pratiquement, vous ne devriez pas indexer n'importe quel champ de ce que vous pourriez penser à ne pas intervenir dans tout type de données de la traversée de l'algorithme, ni de l'insertion, ni la recherche (clause where). Mais vous devriez, si le contraire. Par défaut, vous devez index de tous les domaines. Les champs dont vous devez tenir compte unindexing est si les requêtes sont utilisées uniquement par le modérateur, sauf si ils ont besoin pour la vitesse trop

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X