Quelle est l'importance de l'indexation et de l'indexation en cluster pour les performances de la base de données?

StackOverflow https://stackoverflow.com/questions/403393

  •  03-07-2019
  •  | 
  •  

Question

Il y a récemment eu plusieurs questions sur l'indexation de bases de données et l'indexation en grappes, ce qui était plutôt nouveau pour moi jusqu'à ces deux dernières semaines. Je me demandais à quel point c'était important et à quel genre de gains de performance pouvait-on s'attendre de leur création.

Modifier: Quel est généralement le meilleur type de champs à examiner lors de la création d'un index en cluster lorsque vous débutez?

Était-ce utile?

La solution

Très très A ( G , G ) important . À mon avis, une indexation judicieuse est la chose la plus importante dans l'optimisation des performances de base de données.

Ce n’est pas un sujet facile à couvrir en une seule réponse. Une bonne indexation nécessite de connaître les requêtes sur la base de données, d'effectuer un grand nombre de compromis et de comprendre les implications d'un index spécifique dans le moteur de base de données spécifique. Mais c’est quand même très important.

EDIT: En règle générale, les index clusterisés doivent généralement avoir des longueurs courtes. Ils doivent être créés sur des requêtes qui reflètent une plage. Ils ne devraient pas avoir des entrées en double. Mais ces directives sont très générales et ne constituent en aucun cas la bonne chose. La bonne chose est d'analyser les requêtes qui vont être exécutées. Analysez et analysez soigneusement les plans d'exécution et comprenez quelle est la meilleure façon de le faire. Cela nécessite des années d'expérience et de connaissances et ne doit en aucun cas être expliqué dans un seul paragraphe. C'est la principale chose qui fait de l'expert en DB un expert (ce n'est pas la seule chose, mais c'est primitif pour d'autres choses importantes, telles que les problèmes de simultanéité, la disponibilité, ...)!

Autres conseils

Indexation: extrêmement important. Avoir les mauvais index rend les requêtes plus difficiles, parfois au point qu'elles ne peuvent pas être complétées dans un délai raisonnable.

Les index ont également un impact négatif sur les performances des insertions et l'utilisation du disque. Il est donc également préférable de conserver de nombreux index superflus sur de grandes tables.

Le clustering est une chose qui mérite d’être réfléchie, je pense que cela dépend vraiment du comportement de la base de données spécifique. Si vous pouvez mettre en cluster vos données correctement, vous pouvez réduire considérablement le nombre d'IOP requis pour satisfaire les demandes de lignes non en mémoire.

Sans index appropriés, vous obligez le SGBDR à effectuer des analyses de table pour interroger quoi que ce soit. Terriblement inefficace.

Je suppose également que vous n’avez pas de clé primaire, ce qui est un péché capital en conception relationnelle.

L'indexation est très importante lorsque la table contient plusieurs lignes.
Avec quelques rws, les performances sont meilleures sans index.
Avec de plus grandes tables, les index sont très importants pour obtenir de bonnes performances.
Ce n'est pas facile de les définir. Clustered signifie que les données sont stockées dans l'ordre d'index clusterisé.
Pour obtenir de bons indices sur les index, vous pouvez utiliser Toad

L'indexation est d'une importance capitale .

Le bon index pour une requête peut améliorer les performances de manière si spectaculaire que cela peut ressembler à de sorcellerie .

Comme l'ont dit d'autres réponses, l'indexation est cruciale.

Comme vous pouvez le déduire d'autres réponses, l'indexation en cluster est beaucoup moins cruciale.

Une indexation décente vous permet d’obtenir des gains de performance de premier ordre - les ordres de grandeur sont courants.

L’indexation en cluster est un gain de performance de second ordre ou incrémentiel, qui donne généralement de faibles (< 100%) augmentations de performance.

(Nous nous interrogeons également sur le "gain de performance de 100%"; j’interprète le pourcentage comme ((oldtime - newtime) / newtime) * 100, donc si l’ancien est 10 secondes et le nouveau temps est de 5 secondes, l’augmentation des performances est de 100%.)

Différents SGBD interprètent différemment la signification d'un index clusterisé. Il faut se méfier. En particulier, certains SGBD mettent les données en cluster une fois, puis disparaissent avec le temps, jusqu'à ce que les données soient redirigées. Je pense que d’autres ont une vision plus active de la mise en cluster.

L'index en cluster est habituellement mais pas toujours votre clé primaire. Une façon de voir un index clusterisé est de penser aux données ordonnées physiquement en fonction des valeurs de cet index cluster.

Cela pourrait très bien ne pas être le cas dans la réalité, mais le fait de vous rappeler les index clusterisés vous rapporte généralement les bonus de performance suivants:

  1. Toutes les colonnes de la table sont accessibles gratuitement lorsqu'elles sont résolues à partir d'un index clusterisé comme si elles étaient contenues dans un index de couverture. (Une requête pouvant être résolue en utilisant uniquement les données d'index sans avoir à référencer les pages de données de la table elle-même)

  2. Les opérations de mise à jour peuvent être effectuées directement sur un index clusterisé sans traitement intermédiaire. Si vous effectuez de nombreuses mises à jour sur une table, vous souhaitez généralement référencer les colonnes en cluster.

  3. En fonction de l'implémentation, l'accès séquentiel peut présenter un avantage en ce que les données stockées sur le disque sont récupérées plus rapidement avec moins d'opérations de recherche de disque coûteuses.

  4. En fonction de l'implémentation, il peut y avoir des avantages gratuits pour les index lorsqu'un index physique n'est pas nécessaire, car l'accès aux données peut être résolu via de simples algorithmes de jeu de devinettes.

Ne comptez pas sur # 3 et surtout # 4. Les n ° 1 et n ° 2 sont des mises sûres sur la plupart des plateformes de SGBDR.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top