mysql trop d'index?

Je passe du temps à optimiser notre base de données actuelle.

Je regarde les index spécifiquement.

Il y a quelques questions:

  • y a-t-il trop d'index?
  • Qu'est-ce que les index accéléreront?
  • Qu'est-ce que les index vont ralentir?
  • Quand est-ce une bonne idée d'ajouter un index?
  • Quand est-ce une mauvaise idée d'ajouter un index?
  • Pro et Con de plusieurs index vs index multi-colonnes?
70
demandé sur OMG Ponies 2010-11-08 01:56:32

5 réponses

Qu'est-ce que les index accéléreront?

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

Qu'est-ce que les index vont ralentir?

Manipulation de données -- INSERT, UPDATE, DELETE instructions.

Quand est-ce une bonne idée d'ajouter un index?

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

Quand est-ce une mauvaise idée d'ajouter un index?

Sur les tables qui verront une manipulation de données lourde -- insertion, mettre...

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

Les requêtes

Doivent traiter l'ordre des colonnes lorsqu'elles traitent un index couvrant (un index sur plus d'une colonne), de gauche à droite dans la définition de la colonne d'index. L'ordre des colonnes dans l'instruction n'a pas d'importance, seulement celui des colonnes 1, 2 et 3 - une instruction doit avoir 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, la couverture l'indice pour 1/2/3 n'a pas pu être utilisé.

Dans MySQL, un seul index peut être utilisé par instruction SELECT/dans la requête (les sous-requêtes / etc sont considérées comme une instruction distincte). Et il y a une limite à la quantité d'espace par table que MySQL permet. En outre, l'exécution d'une fonction sur une colonne indexée rend l'index inutile - c'est à dire:

WHERE DATE(datetime_column) = ...
121
répondu OMG Ponies 2010-11-07 23:04:08

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

Y a-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. Utiliser des outils comme pt-double de clé-checker et pt-index-l'utilisation de pour vous aider à découvrir les index que vous n'avez pas besoin.

Qu'est-ce que les index accéléreront?

  • conditions de recherche dans le clause.
  • conditions de jointure.
  • quelques cas D'ordre par.
  • quelques cas de GROUP BY.
  • contraintes uniques.
  • contraintes de clé étrangère.
  • recherche en texte intégral.

D'autres réponses ont indiqué que INSERT / UPDATE / DELETE sont plus lents que les index que vous avez. C'est vrai, mais considérez que de nombreuses utilisations de UPDATE et DELETE ont également des clauses WHERE et dans MySQL, UPDATE et DELETE support se joint également. Les index peuvent bénéficier à ces requêtes plus que compenser les frais généraux de mise à jour des index.

En outre, InnoDB verrouille les lignes affectées par une mise à jour ou une suppression. Ils appellent ce verrouillage au niveau de la ligne, mais c'est vraiment un verrouillage au niveau de l'index. S'il n'y a pas d'index pour affiner 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 apportées par d'autres clients, même s'ils ne sont pas en conflit logique.

Quand est-ce une bonne idée pour ajouter 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'ajouter un index?

Si l'index est un préfixe gauche d'un autre index existant, ou l'index n'aide aucune des requêtes que vous devez exécuter.

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

Dans certains cas, MySQL peut effectuer optimisation de fusion d'index , et union ou intersection des résultats des recherches d'index indépendantes. Mais cela donne de meilleures performances pour définir un seul index afin que la fusion d'index n'ait pas besoin d'être faite.

Pour un de mes clients de conseil, j'ai défini un index multi-colonnes sur une table plusieurs à plusieurs où il n'y avait pas d'index, et amélioré leur requête de jointure par un facteur de 94 millions!

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

Voir aussi ma présentation Comment Concevoir des Indices, Vraiment.

51
répondu Bill Karwin 2012-12-12 21:10:13

Y a-t-il trop d'index?

Les index doivent être informés par le problème à portée de main: les tables, les requêtes que votre application va exécuter, etc.

Qu'est-ce que les index accéléreront?

Sélectionne.

Qu'est-ce que les index vont ralentir?

Les insertions seront plus lentes, car vous devez mettre à jour l'index.

Quand est-ce une bonne idée d'ajouter un index?

Lorsque votre application a besoin d'une autre La clause where.

Quand est-ce une mauvaise idée d'ajouter un index?

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

Avantages et inconvénients des index multiples vs index multi-colonnes?

Je ne comprends pas la question. Si vous avez une contrainte d'unicité qui inclut plusieurs colonnes, modélisez-la en tant que telle.

7
répondu duffymo 2010-11-07 23:07:05

Y a-t-il trop d'index?

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

Qu'est-ce que les index accéléreront?

Toutes les requêtes contre la table d'index / vue.

Qu'est-ce que les index vont ralentir?

Toutes les instructions INSERT sur la table indexée seront ralenties, car chaque nouvel enregistrement devra être indexé.

Quand est-ce une bonne idée d'ajouter 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 du PK en cluster, auquel cas vous devez ajouter des index basés sur les filtres que vous recherchez (si la performance le juge approprié).

Quand est-ce une mauvaise idée d'ajouter un index?

Quand vous le faites pour l'amour d'elle - je.e la sur-optimisation.

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

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

4
répondu RPM1984 2010-11-07 23:04:59

Y a-t-il trop d'index?

Oui, comme tout, trop d'index ralentiront la manipulation des données.

Quand est-ce une bonne idée d'ajouter un index?

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

3
répondu Daniel Fath 2010-11-07 23:26:57