indices primaires et indices secondaires: différences de rendement

j'ai une petite question: Quelle est la différence de performance entre les indices primaire et secondaire? Quelle est la cause de cette différence?

je cherche sur Google, et j'ai vu que les index secondaires sont stockés dans une autre table, donc cela ralentit toutes les opérations.. mais il ya d'autres raisons qui justifient cette baisse de performance?

Merci beaucoup

1
demandé sur satboy78 2012-05-03 12:39:11

1 réponses

une table en grappes est un arbre B sans portion" tas " -les rangées sont stockées directement dans la structure de L'arbre B de l'indice de regroupement (clé primaire). Les noeuds de L'arbre B peuvent être fendus ou fusionnés, de sorte que l'emplacement physique ou les lignes peuvent changer, de sorte que nous ne pouvons pas avoir un simple "pointeur" d'un index secondaire aux lignes, de sorte que l'index secondaire doit inclure une copie complète des champs de l'index primaire pour être en mesure d'identifier de façon fiable les lignes.

c'est vrai pour Oracle, MS SQL Serveur et est également vrai pour InnoDB .

, ce qui signifie que les indices secondaires dans les tables regroupées sont "plus gros" que les indices secondaires dans les tables en tas, qui:

  • réduit le regroupement des données,
  • réduit l'efficacité du cache,
  • rend leur entretien plus coûteux,
  • et plus important encore, a des conséquences sur les performances de requête:
    • la requête à travers un index secondaire peut nécessiter une double recherche - une recherche à travers l'index secondaire pour localiser les données "clés" et une autre à travers la Primaire, pour localiser la rangée elle-même (Oracle a quelques optimisations intéressantes pour éviter la deuxième recherche, mais InnoDB ne le fait pas, à ma connaissance).
    • d'autre part, l'indice secondaire couvre naturellement" 1519200920 plus de champs, de sorte que la deuxième recherche pourrait être évitée tout à fait où un indice traditionnel basé sur les tas exigerait un accès à une table. Cependant, le même effet peut être obtenu dans l'indice basé sur les tas, en y ajoutant simplement plus de champs.

Permettez-moi de citer utilisez L'Index, Luc! : "Les avantages de l'indice de la a organisé des tables et des index en cluster sont pour la plupart limitées à des tableaux qui n'ont pas besoin d'un deuxième indice."

Qui est la honte, depuis MySQL ne vous permet pas de choisir le clustering indépendamment du moteur de stockage.

4
répondu Branko Dimitrijevic 2012-05-23 12:41:39