J'ai creusé quelques heures concernant ma question et je n'ai pas obtenu de réponse satisfaisante. J'ai encore un doute. J'ai trouvé ce qui suit sur l'index clusterisé:
J'ai obtenu ces points, mais mes questions sont:
Veuillez trouver mon architecture de table:
Faites-moi savoir si autre chose est nécessaire pour obtenir des réponses à ces questions.
L'index de cluster existe-t-il dans la base de données Oracle depuis que j'ai lu dans certains blogs
Oui il y a.
Il est appelé "table organisée par index" (IOT) - qui, à mon avis, est le meilleur nom car il indique clairement que l'index et la table sont la même chose physique (ce qui explique pourquoi ne peut avoir que un index cluster dans SQL Server)
Si oui, faites-moi savoir l'instruction SQL pour créer un index de cluster.
Il n'y a rien de tel que create clustered index
dans Oracle.
Pour créer une table organisée par index, vous utilisez le create table
instruction avec le organization index
option.
Dans Oracle, vous utilisez généralement les IOT pour les tables très étroites. Très souvent pour les tables qui ne comprennent que les colonnes de clé primaire (par exemple, les tables de mappage m: n), par exemple.
create table assignment
(
person_id integer not null,
job_id integer not null,
primary key (person_id, job_id)
)
organization index;
Vous pouvez créer des IOT avec plus de colonnes, dans ce cas, vous devez définir les colonnes non-pk comme des colonnes "incluses". Par exemple. si la table d'affectation doit avoir des colonnes supplémentaires, comme les dates de début et de fin qui ne font pas partie de la clé primaire:
create table assignment
(
person_id integer not null,
job_id integer not null,
start_date date,
end_date date,
primary key (person_id, job_id)
)
organization index
including start_date
overflow storage (initial 4k);
Voir le manuel pour plus de détails et d'exemples: https://docs.Oracle.com/database/121/SQLRF/statements_7002.htm#i2153235
Un peu sans rapport, mais peut-être intéressant de toute façon:
Un article de blog intéressant qui remet en question le comportement de SQL Server (et MySQL) de l'utilisation d'un index cluster comme valeur par défaut lors de la création d'une table:
Valeurs par défaut déraisonnables: clé primaire comme clé de clustering
Venant d'un milieu Oracle, je suis entièrement d'accord avec cela.
J'ai trouvé ce qui suit sur l'index clusterisé:
- Les données sont stockées dans l'ordre de l'index clusterisé.
- Un seul index cluster par table.
- Lorsqu'une clé primaire est créée, un index de cluster est également créé automatiquement.
Vous avez creusé quelques heures. Vous devriez avoir remarqué que tous les faits ci-dessus sont pour SQL Server et pas Oracle .
Les tables (au moins ordinaires) dans Oracle n'ont pas d'index cluster. Il existe un type spécial de tables, appelées Tables organisées par index (IOT) qui sont de concept similaire. Détails dans documentation Oracle (9i): Index Organized Tables :
Que sont les tables organisées par index?
Une table organisée par index - contrairement à une table ordinaire - a sa propre façon de structurer, de stocker et d'indexer les données. Une comparaison avec un tableau ordinaire peut aider à expliquer son caractère unique.
Tableaux organisés par index et tableaux ordinaires
Une ligne d'une table ordinaire a un emplacement physique stable. Une fois cet emplacement établi, la ligne ne se déplace jamais complètement. Même s'il est partiellement déplacé avec l'ajout de nouvelles données, il y a toujours un élément de ligne à l'adresse physique d'origine - identifié par l'ID physique d'origine - à partir duquel le système peut trouver le reste de la ligne. Tant que la ligne existe, son rowid physique ne change pas. Un index dans une table ordinaire stocke à la fois les données de la colonne et le rowid.
Une ligne d'une table organisée en index n'a pas d'emplacement physique stable. Il conserve les données dans un ordre trié, dans les feuilles d'un index B * -tree construit sur la clé primaire de la table. Ces lignes peuvent se déplacer pour conserver l'ordre de tri. Par exemple, une insertion peut entraîner le déplacement d'une ligne existante vers un emplacement différent, voire vers un bloc différent.
Les feuilles de l'index de l'arbre B * contiennent la clé primaire et les données de ligne réelles. Les modifications apportées aux données de la table - par exemple, l'ajout de nouvelles lignes ou la mise à jour ou la suppression de lignes existantes - entraînent uniquement la mise à jour de l'index.
Voir aussi la documentation sur (11g): Index Organized Tables dans la version la plus récente d'Oracle 11g.