MySQL – pourquoi ne pas indexer tous les champs?

Récemment, j’ai appris les merveilles des index et les performances se sont considérablement améliorées. Cependant, avec tout ce que j’ai appris, je n’arrive pas à trouver la réponse à cette question.

Les index sont excellents, mais pourquoi quelqu’un ne pourrait-il pas simplement indexer tous les champs pour rendre la table incroyablement rapide? Je suis sûr qu’il y a une bonne raison de ne pas le faire, mais qu’en est-il de trois champs dans une table de trente champs? 10 dans un champ de 30? Où devrait-on tracer la ligne et pourquoi?

Les index occupent de l’espace en mémoire (RAM); Trop d’index ou de trop gros index et la firebase database devra les échanger contre le disque. Ils augmentent également le temps d’insertion et de suppression (chaque index doit être mis à jour pour chaque élément de données inséré / supprimé / mis à jour).

Vous n’avez pas de mémoire infinie. Faire en sorte que tous les index tiennent dans la RAM = bien.

Vous n’avez pas de temps infini. L’indexation uniquement des colonnes dont vous avez besoin d’indexer minimise l’impact des performances d’insertion / suppression / mise à jour.

N’oubliez pas que chaque index doit être mis à jour chaque fois qu’une ligne est mise à jour, insérée ou supprimée. Donc, plus vous avez d’index, plus les performances seront faibles pour les opérations d’écriture.

De plus, chaque index occupe davantage d’espace disque et d’espace mémoire (lorsqu’il est appelé), ce qui pourrait ralentir les opérations de lecture (pour les grandes tables). Regarde ça

Vous devez équilibrer les besoins du CRUD. L’écriture dans les tables devient lente. Pour ce qui est de savoir où tracer la ligne, cela dépend de la manière dont les données sont saisies (filtrage par sorting, etc.).

L’indexation prendra plus d’espace alloué à la fois sur le disque dur et sur le disque dur, mais améliorera aussi beaucoup les performances. Malheureusement, lorsqu’il atteint la limite de mémoire, le système restitue l’espace disque et risque de compromettre les performances. En pratique, vous ne devez indexer aucun champ que vous pensez ne pas impliquer dans un quelconque algorithme de transfert de données, ni l’insertion ni la recherche (clause WHERE). Mais vous devriez si autrement. Par défaut, vous devez indexer tous les champs. Les champs que vous devriez considérer comme étant non indexés sont si les requêtes ne sont utilisées que par le modérateur, sauf si elles nécessitent trop de rapidité

Ce n’est pas une bonne idée d’indexer toutes les colonnes d’une table. Bien que cela rende la table très rapide à lire, cela devient aussi beaucoup plus lent à écrire. Ecrire dans une table dont chaque colonne est indexée impliquerait de placer le nouvel enregistrement dans cette table et de mettre ensuite les informations de chaque colonne dans sa propre table d’index.