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 :
-
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.
-
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.
-
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 ?