4 votes

Qu'est-ce qu'une table d'index clusterisé?

Je peux me tromper, mais il semble y avoir des avis différents sur Internet concernant ce que sont ces tables. SQL Server, MySQL, DB2 et PostgreSQL montrent des définitions différentes de ces tables.

Après avoir lu beaucoup de choses provenant de différents fournisseurs (manuels des bases de données, messages d'utilisateurs, etc.), j'ai pu distinguer trois types de tables d'intérêt (il existe de nombreux autres types sans intérêt pour cette question). Veuillez être patient :

  1. Table Heap:

    • Toutes les lignes sont stockées (probablement non triées) dans la table de tas.
    • Chaque ligne possède un ROWID interne qui l'identifie.
    • Les index sont facultatifs. S'ils sont ajoutés, ils incluent les colonnes indexées en tant que clé d'index, ainsi que le ROWID (pour accéder éventuellement aux vraies lignes dans le tas).
    • Remarque : ce cas n'est pas intéressant pour cette question, mais je l'ai ajouté ici pour le différencier du troisième cas ci-dessous.
  2. Table d'Index Pur : <-- Est-ce une table d'index clusterisé ?

    • Il y a un index principal qui inclut les colonnes clés, ainsi que les colonnes non clés. Toutes les données sont stockées dans l'index.
    • Les données suivent l'ordre de l'index principal, donc elles sont triées par l'index principal.
    • Il n'est pas nécessaire d'avoir une table de tas pour stocker les lignes. Toutes les données sont déjà dans l'index. Il n'y a aucun ROWID, puisqu'il n'y a pas de table de tas.
    • Les tables SQL Server (généralement) entrent par défaut dans cette catégorie.
    • Les tables MySQL InnoDB semblent également entrer dans cette catégorie puisqu'elles ne semblent pas avoir de table de tas du tout.
  3. Table d'Index + Tas Trié : <-- Est-ce une table d'index clusterisé ?

    • Il y a un "index clusterisé" principal.
    • Il y a une table de tas où les lignes sont stockées dans l'ordre défini par l'index clusterisé.
    • Chaque ligne dans la table de tas possède un ROWID.
    • L'index clusterisé n'inclut pas les colonnes non clés, mais un ROWID pour accéder à la vraie ligne dans la table de tas.
    • DB2 semble pouvoir "Cluster" les tables.
    • PostgreSQL semble également appeler ces tables "tables d'indexage clusterisé".

Maintenant, lequel de ces types #2 ou #3 est une "table d'index clusterisé" ? Qui dit la vérité et qui ment ? :D

En d'autres termes, le terme "table d'index clusterisé" est-il un terme commercial que chaque fournisseur définit librement comme bon lui semble, ou existe-t-il une définition officielle unique selon une théorie de base de données officielle ?

2voto

Gordon Linoff Points 213350

À ma connaissance, un "index groupé" est un index où les nœuds feuilles de l'index sont les pages de données. Cela diffère d'un index non groupé où les nœuds feuilles sont des références aux lignes stockées sur les pages de données.

Une table ne peut avoir qu'un index groupé au maximum. Dans une table avec un index groupé, les données sont triées par les clés d'index.

Postgres ne prend pas en charge les index groupés. Il dispose toutefois d'une optimisation de table appelée "cluster" qui trie les données en fonction d'un index. Cependant, cet ordre n'est pas maintenu, ce n'est donc pas la même chose qu'un index groupé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X