mysql trop d’index?

Je passe du temps à optimiser notre firebase database actuelle.

Je regarde les index spécifiquement.

Il y a quelques questions:

  • Existe-t-il trop d’index?
  • Qu’est-ce que les index accélèrent?
  • Qu’est-ce que les index ralentissent?
  • Quand est-ce une bonne idée d’append un index?
  • Quand est-ce une mauvaise idée d’append un index?
  • Pro et Con de plusieurs index vs index multi-colonnes?

Qu’est-ce que les index accélèrent?

Récupération de données – instructions SELECT.

Qu’est-ce que les index ralentissent?

Manipulation des données – instructions INSERT, UPDATE, DELETE.

Quand est-ce une bonne idée d’append un index?

Si vous sentez que vous souhaitez obtenir de meilleures performances de récupération de données.

Quand est-ce une mauvaise idée d’append un index?

Sur les tables qui verront la manipulation de données lourde – insertion, mise à jour …

Pro et Con de plusieurs index vs index multi-colonnes?

Les requêtes doivent traiter l’ordre des colonnes lorsqu’elles traitent d’un index de couverture (un index sur plusieurs colonnes), de gauche à droite dans la définition de la colonne d’index. L’ordre des colonnes dans l’instruction n’a pas d’importance, seule celle des colonnes 1, 2 et 3 – une déclaration nécessite une référence à la colonne 1 avant que l’index puisse être utilisé. S’il n’y a qu’une référence à la colonne 2 ou 3, l’index de couverture pour 1/2/3 ne peut pas être utilisé.

Dans MySQL, un seul index peut être utilisé par SELECT / instruction dans la requête (les sous-requêtes / etc sont considérées comme une instruction séparée). Et il y a une limite à la quantité d’espace par table autorisée par MySQL. De plus, l’exécution d’une fonction sur une colonne indexée rend l’index inutile – IE:

WHERE DATE(datetime_column) = ... 

Je ne suis pas d’accord avec certaines des réponses à cette question.

Existe-t-il trop d’index?

Bien sûr. Ne créez pas d’index qui ne sont utilisés par aucune de vos requêtes. Ne créez pas d’index redondants. Utilisez des outils tels que pt-duplicate-key-checker et pt-index-use pour vous aider à découvrir les index inutiles.

Qu’est-ce que les index accélèrent?

  • Conditions de recherche dans la clause WHERE.
  • Conditions de jointure
  • Quelques cas de COMMANDE PAR.
  • Quelques cas de GROUP BY.
  • Contraintes UNIQUES
  • Contraintes de clés étrangères.
  • Recherche en texte intégral.

D’autres réponses ont indiqué que INSERT / UPDATE / DELETE ralentit le plus d’index dont vous disposez. C’est vrai, mais considérez que beaucoup d’utilisations de UPDATE et de DELETE ont aussi des clauses WHERE et dans MySQL, UPDATE et DELETE supportent aussi les JOIN. Les index peuvent bénéficier de ces requêtes plus que compenser la surcharge de la mise à jour des index.

En outre, InnoDB verrouille les lignes affectées par une mise à jour ou une suppression. Ils appellent ce locking au niveau de la ligne, mais c’est vraiment un locking au niveau de l’index. S’il n’y a pas d’index pour limiter la recherche, InnoDB doit verrouiller beaucoup plus de lignes que la ligne spécifique que vous modifiez. Il peut même verrouiller toutes les lignes de la table. Ces verrous bloquent les modifications apscopes par d’autres clients, même s’ils ne sont pas en conflit logique.

Quand est-ce une bonne idée d’append un index?

Si vous savez que vous devez exécuter une requête qui bénéficierait d’un index dans l’un des cas ci-dessus.

Quand est-ce une mauvaise idée d’append un index?

Si l’index est un préfixe de gauche d’un autre index existant, ou que l’index ne permet aucune des requêtes à exécuter.

Pro et Con de plusieurs index vs index multi-colonnes?

Dans certains cas, MySQL peut effectuer une optimisation de la fusion d’index et l’union ou intersection des résultats de recherches d’index indépendantes. Mais cela donne de meilleures performances pour définir un seul index, de sorte que la fusion d’index n’a pas besoin d’être effectuée.

Pour l’un de mes clients consultants, j’ai défini un index multi-colonnes sur une table plusieurs-à-plusieurs sans index, et amélioré leur requête de joint d’un facteur 94 millions!

La conception des index appropriés est un processus complexe, basé sur les requêtes à optimiser . Vous ne devriez pas faire de règles générales comme “indexer tout” ou “ne rien indexer pour éviter de ralentir les mises à jour”.

Voir aussi ma présentation Comment concevoir des index, vraiment .

Existe-t-il trop d’index?

Les index doivent être informés par le problème en question: les tables, les requêtes que votre application va exécuter, etc.

Qu’est-ce que les index accélèrent?

SELECT.

Qu’est-ce que les index ralentissent?

Les INSERT seront plus lents, car vous devez mettre à jour l’index.

Quand est-ce une bonne idée d’append un index?

Lorsque votre application a besoin d’une autre clause WHERE.

Quand est-ce une mauvaise idée d’append un index?

Lorsque vous n’en avez pas besoin pour interroger ou appliquer des contraintes d’unicité.

Avantages et inconvénients des index multiples par rapport aux index multi-colonnes?

Je ne comprends pas la question. Si vous avez une contrainte d’unicité qui inclut plusieurs colonnes, modélisez-la par tous les moyens.

Existe-t-il trop d’index?

Oui. Ne cherchez pas à créer des index, créez-les si nécessaire.

Qu’est-ce que les index accélèrent?

Toute requête sur la table / vue des index.

Qu’est-ce que les index ralentissent?

Toute instruction INSERT sur la table indexée sera ralentie car chaque nouvel enregistrement devra être indexé.

Quand est-ce une bonne idée d’append un index?

Lorsqu’une requête ne s’exécute pas à une vitesse acceptable. Vous pouvez filtrer sur des enregistrements qui ne font pas partie de la clé de cluster, auquel cas vous devez append des index basés sur les filtres que vous recherchez (si les performances le permettent).

Quand est-ce une mauvaise idée d’append un index?

Lorsque vous le faites pour cela – c’est-à-dire sur-optimisation.

Pro et Con de plusieurs index vs index multi-colonnes?

Dépend des requêtes que vous essayez d’améliorer.

Existe-t-il trop d’index?

Ouais, comme toutes choses, trop d’index ralentiront la manipulation des données.

Quand est-ce une bonne idée d’append un index?

Une bonne idée d’append un index est lorsque vos requêtes sont trop lentes (c.-à-d. Que vous avez trop de jointures dans vos requêtes). Vous ne devez utiliser cette optimisation qu’après avoir créé un modèle solide pour modifier les performances.