📍8 rue des martyrs
75009 Paris Cedex

Index Organized Table Oracle : fonctionnement, atouts et limites

index organised table

Une Index Organized Table (IOT) Oracle est une table dont les lignes sont stockées directement dans un index B-tree, triées par clé primaire. Contrairement à une table heap, les données ne sont pas dispersées mais physiquement organisées par clé, ce qui accélère les recherches par clé primaire et par intervalle.

Vous administrez une base Oracle ? Vos tables de référence grossissent à vue d’œil et, malgré vos précieux index, les requêtes sur la clé primaire peinent à suivre ? C’est exactement le terrain de jeu privilégié de l’Index Organized Table, ou IOT pour les intimes. Dans les lignes qui suivent, nous allons passer en revue son fonctionnement, ses atouts, ses limites… et surtout le moment opportun pour l’adopter (ou la laisser de côté).

Table des matières

Qu’est-ce qu’une Index-Organized Table (IOT) ?

Définition officielle Oracle

Pour Oracle, une Index Organized Table est une table dont les données résident dans la structure même d’un index B-tree : la clé primaire sert à la fois d’identifiant logique et de « GPS » physique. En clair, pas de segment « heap » séparé : l’index constitue la table à lui tout seul.

Autrement dit, le segment d’index est la table, point barre.

Différence fondamentale avec une table heap

Pour visualiser la différence, imaginez une bibliothèque :

  • Table heap : les livres atterrissent là où l’on trouve de la place ; un catalogue (l’index) indique ensuite l’étagère exacte.
  • Index Organized Table : dès qu’un livre arrive, on le range directement dans l’ordre de son ISBN (la clé). Catalogue et rangement ne font plus qu’un.

Plus concrètement :

  • Heap : données non triées, plusieurs index distincts.
  • IOT : données au sein du B-tree, ordonnées par clé primaire.
  • Heap : chaque ligne possède un ROWID physique.
  • IOT : aucun ROWID stocké ; la clé primaire sert de repère.

Pourquoi Oracle a introduit les IOT

Si Oracle a conçu les Index Organized Tables, c’est pour répondre aux besoins suivants :

  • Soutenir les applications OLTP qui multiplient les rech erches par clé primaire.
  • Accélérer les accès aux tables de référence ou « dictionnaires » contenant peu de colonnes.
  • Diminuer les lectures physiques et maximiser la densité de stockage.

Le but ? Court-circuiter le passage « index → table » et rapprocher physiquement les lignes proches en valeur, histoire d’optimiser les scans par plage.

Architecture interne : comment fonctionne une IOT

Organisation B-tree basée sur la clé primaire

Une IOT reprend la structure d’un B-tree :

  • Les clés logiques se logent dans les nœuds internes.
  • Les feuilles contiennent à la fois la clé primaire et toutes les colonnes.
  • Les feuilles sont enchaînées, ce qui fluidifie les parcours par intervalle.

Ainsi, un simple SELECT … WHERE pk = :val revient à :

  • Parcourir une seule fois le B-tree.
  • Toucher directement le bloc qui héberge la ligne.

Fini le double bond index → table propre au duo heap + index.

Segments : data segment, overflow segment, index segment

Dans le dictionnaire (vue DBA_SEGMENTS), une IOT apparaît au travers de plusieurs segments :

  • Segment principal : l’arbre B-tree contenant données et clés.
  • Overflow segment (optionnel) : dépôt pour les colonnes gourmandes ou peu sollicitées.
  • Index secondaires : arbres supplémentaires sur d’autres colonnes.

Grâce aux clauses PCTTHRESHOLD et INCLUDING, vous décidez quelles colonnes restent « en ligne » et lesquelles partent en overflow.

Absence de ROWID et impact sur l’accès aux données

Dans le monde heap, l’index stocke un ROWID pointant vers la ligne. Sur une IOT :

  • Le ROWID physique disparaît.
  • Les index secondaires portent la clé primaire pour retrouver la ligne dans l’arbre.

Conséquences directes :

  • Les index secondaires gagnent en taille (clé secondaire + PK).
  • Un accès via ces index se fait en deux temps : index secondaire → IOT (via PK), toujours sans passer par une table heap.

Avantages et limites des IOT

Performances en lecture (point lookup, range scan)

Côté lecture, la formule est payante :

  • Point lookup : un unique parcours de l’arbre, donc très peu d’I/O.
  • Range scan : les lignes voisines étant contiguës, la lecture séquentielle est ultra-rapide.
  • Buffer cache : un même bloc contient index et données, ce qui maximise la rétention en mémoire.

D’après Oracle, quand plus de 90 % des accès passent par la PK ou un intervalle sur celle-ci, l’IOT est souvent la meilleure option.

Réduction d’espace disque et compression

Le gain d’espace se fait sentir à deux niveaux :

  • Suppression du segment heap.
  • Élimination du ROWID dans l’index primaire.

En prime, vous conservez l’accès aux mécanismes de compression d’index (prefix, advanced, etc.), ce qui peut réduire nettement la facture disque, surtout sur des tables fortement indexées.

Coûts sur les opérations DML et fragmentation

Revers de la médaille : les DML peuvent se complexifier.

  • INSERT : chaque nouvelle ligne doit se placer au bon endroit dans l’arbre, d’où des splits de blocs plus fréquents.
  • UPDATE : toucher à la clé primaire équivaut à un delete puis un insert.
  • DELETE : de grosses purges laissent des trous, entraînant la fragmentation du B-tree.

Dans les environnements très transactionnels ou avec des clés non séquentielles, ces coûts peuvent peser lourd ; il faut donc prévoir un minimum de maintenance (rebuild, coalesce).

Quand et comment utiliser une IOT

Cas d’usage typiques (OLTP, lookup tables, IoT devices logs)

Dans quels scénarios l’Index Organized Table fait-elle des étincelles ?

  • Tables de référence : codes pays, listes de statuts, paramètres, souvent consultés via la PK.
  • Tables de mapping : conversion id logique ↔ id interne.
  • Applications OLTP : accès massifs par PK ou par plage (dates, identifiants séquentiels).
  • Journaux d’objets IoT : combinaison device_id + timestamp, idéale pour les scans temporels.

En revanche, passez votre chemin si :

  • La table subit surtout des full scans.
  • La clé primaire change régulièrement.
  • Les clés sont hautement aléatoires, génératrices de forte fragmentation.

Bonnes pratiques de conception (choix de la clé primaire, overflow)

Quelques repères avant de sauter le pas :

  • Optez pour une clé primaire courte : moins de place, plus de vitesse.
  • Privilégiez une clé stable pour éviter les updates pénalisants.
  • Déportez CLOB ou VARCHAR2 XXL dans l’overflow pour garder les feuilles légères.
  • Jouez sur PCTTHRESHOLD afin de trouver l’équilibre idéal entre densité et I/O.

Exemples de requêtes et plans d’exécution

Un exemple concret :

Création d’une IOT de référence :

CREATE TABLE client_ref (
  client_id    NUMBER,
  code_client  VARCHAR2(30),
  nom          VARCHAR2(100),
  statut       VARCHAR2(10),
  CONSTRAINT pk_client_ref PRIMARY KEY (client_id)
)
ORGANIZATION INDEX;

Puis, un test de recherche :

EXPLAIN PLAN FOR
SELECT nom, statut
FROM client_ref
WHERE client_id = 101;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

Le plan révèle un simple INDEX UNIQUE SCAN : plus aucune étape « TABLE ACCESS BY ROWID ».

Création, maintenance et tuning

Syntaxe CREATE TABLE … ORGANIZATION INDEX

Voici un squelette typique :

CREATE TABLE ma_iot (
  id          NUMBER,
  col1        VARCHAR2(50),
  col2        VARCHAR2(200),
  col3        CLOB,
  CONSTRAINT pk_ma_iot PRIMARY KEY (id)
)
ORGANIZATION INDEX
PCTTHRESHOLD 20
INCLUDING col2
OVERFLOW;

Décryptage express :

  • ORGANIZATION INDEX : on déclare la table comme IOT.
  • PCTTHRESHOLD 20 : seules les lignes occupant ≤ 20 % d’un bloc restent dans l’arbre.
  • INCLUDING col2 : tout jusqu’à col2 reste « en ligne » ; les colonnes suivantes iront en overflow.
  • OVERFLOW : création du segment de débordement.

Gestion des index secondaires et des partitions

Besoin d’autres perspectives sur vos données ? Rien n’empêche de créer des index secondaires :

CREATE INDEX idx_ma_iot_col1
ON ma_iot(col1);

Ils embarqueront la colonne indexée et la clé primaire, d’où une taille un peu plus importante. Lorsqu’Oracle s’en sert, il repasse par la PK pour atterrir sur la bonne feuille, sans jamais toucher de segment heap.

Pour les entrepôts surdimensionnés, les IOT sont partitionnables (range, hash, list…) : idéal pour gérer la croissance, archiver à chaud ou échanger des partitions en un clin d’œil.

Rebuild, analyse de statistiques et monitoring

Un B-tree, ça se bichonne :

  • Rebuild / Coalesce dès que la fragmentation monte en flèche.
  • DBMS_STATS pour des statistiques toujours à jour.
  • Surveillance régulière via DBA_SEGMENTS, DBA_INDEXES et DBA_TABLES pour anticiper la croissance de l’overflow.

Les manuels « Concepts » et « SQL Language Reference » d’Oracle restent vos meilleurs alliés pour affiner les réglages.

Comparatif : IOT vs autres options de stockage Oracle

IOT vs Table heap + index B-tree

Index Organized Table

  • + Un seul saut pour la PK : rapidité au rendez-vous.
  • + Pas de segment heap : moins d’espace disque.
  • – INSERT/UPDATE susceptibles de provoquer des splits et de la fragmentation.
  • – Index secondaires plus volumineux.

Heap + index B-tree

  • + INSERT séquentiels très efficaces.
  • + Grande flexibilité pour divers modes d’accès.
  • – Toujours l’indirection index → table lors des lectures indexées.
  • – Stockage en double (données + index).

IOT vs Table clusterisée (CLUSTER)

Les tables clusterisées rapprochent physiquement plusieurs tables partageant une même clé de cluster. L’IOT cible surtout l’accès rapide à une seule table triée sur sa clé primaire, tandis que le CLUSTER favorise les jointures récurrentes entre plusieurs tables. Deux logiques, deux usages.

IOT vs Table partitionnée / tables externes

  • Tables partitionnées : dédiées à la scalabilité et à la gestion du cycle de vie ; elles se combinent aisément avec les IOT.
  • Tables externes : idéales pour lire des fichiers hors base, mais ne remplacent pas une IOT. On peut cependant les utiliser pour précharger les données avant insertion dans l’IOT.

FAQ rapide sur les Index-Organized Tables

Puis-je convertir une table existante en IOT ?

Vous ne pouvez pas simplement « ALTER TABLE … ORGANIZATION INDEX ». La méthode classique consiste à :

  • Créer une nouvelle table IOT via CTAS (CREATE TABLE AS SELECT) :
CREATE TABLE ma_iot_new
ORGANIZATION INDEX
AS
SELECT * FROM ma_table_heap;
  • Recréer les contraintes et index secondaires si nécessaire.
  • Renommer les tables (ou utiliser un mécanisme avec partition exchange si la table est partitionnée).

Pour des environnements critiques, une stratégie avec partitioning + exchange partition permet de limiter les interruptions.

Impact sur la réplication et les backups

Les Index Organized Tables sont supportées par les mécanismes standard Oracle :

  • RMAN pour les sauvegardes et restaurations.
  • Data Guard pour la réplication physique.
  • Streams / GoldenGate (selon version) pour la réplication logique.

Il faut cependant prendre en compte la taille potentiellement plus importante des index secondaires et la dynamique de fragmentation dans les plans de maintenance et de réplication.

Compatibilité avec Oracle Autonomous Database

Oracle Autonomous Database (transactionnelle et data warehouse) prend en charge les Index Organized Tables, avec toutefois des contraintes et des bonnes pratiques propres à l’environnement managé. L’optimiseur pouvant s’adapter automatiquement, il est recommandé de :

  • Tester les IOT sur des jeux de données représentatifs.
  • Analyser les plans d’exécution générés automatiquement.

La documentation Oracle Autonomous Database (sur le site d’Oracle) donne des recommandations spécifiques sur l’usage des IOT et des options de compression/partitioning dans ce contexte.

Conclusion

L’Index Organized Table Oracle se révèle redoutable quand l’essentiel de vos accès passe par la clé primaire ou ses intervalles. En fusionnant index et données dans un seul B-tree, elle coupe court aux accès multiples et allège le stockage.

Cela dit, elle exige de la préparation : clé courte et stable, overflow bien réglé, surveillance de la fragmentation et des index secondaires. Identifiez d’abord vos tables les plus sollicitées par PK, montez un prototype, comparez les plans d’exécution, mesurez les gains… et déployez seulement là où le retour sur investissement est incontestable.

Questions fréquentes sur les Index Organized Tables (IOT)

Qu’est-ce qu’une Index Organized Table (IOT) ?

Une Index Organized Table (IOT) est une table Oracle où les données sont stockées directement dans un index B-tree, triées par clé primaire. Contrairement à une table heap, elle combine index et données pour optimiser les recherches par clé primaire et par plage.

Quelle est la différence entre une table heap et une Index Organized Table ?

Une table heap stocke les données de manière non triée avec des index séparés, tandis qu’une IOT stocke les données directement dans un index B-tree, triées par clé primaire. Les IOT éliminent le besoin de ROWID et optimisent les recherches par clé.

Quand utiliser une Index Organized Table dans Oracle ?

Utilisez une IOT pour les tables de référence ou les applications OLTP nécessitant des recherches fréquentes par clé primaire ou par plage. Elles sont idéales pour les tables contenant peu de colonnes et des données fortement consultées.

Quels sont les avantages des Index Organized Tables ?

Les IOT offrent des performances accrues pour les recherches par clé primaire et par plage, réduisent les lectures physiques et optimisent le stockage. Elles éliminent également le besoin d’un segment de table séparé.

Quels sont les inconvénients des Index Organized Tables ?

Les IOT peuvent entraîner une surcharge de gestion pour les index secondaires, qui incluent la clé primaire. Elles sont moins adaptées aux tables avec des colonnes volumineuses ou des mises à jour fréquentes des clés primaires.

Comment les données sont-elles organisées dans une IOT ?

Dans une IOT, les données sont stockées dans un B-tree, triées par clé primaire. Les nœuds internes contiennent les clés logiques, tandis que les feuilles contiennent les clés primaires et les colonnes associées, enchaînées pour faciliter les scans par plage.

Nos autres articles

changer batterie sur clio 3

Comment changer la batterie sur une Clio 3 ?

En 20 à 30 minutes, vous pouvez changer la batterie sur une Clio 3 vous-même, à condition de respecter l’ordre de déconnexion, de choisir ...
problème après changement de pare brise

Problème après changement de pare-brise : précautions

Un problème après changement de pare brise se repère souvent dans les 24 à 48 h : bruit d’air, fuite, buée, capteur déréglé ou ...
histo auto

Histo Auto : l’historique d’un véhicule d’occasion

En 30 secondes, Histo Auto permet d’obtenir un rapport d’historique sur un véhicule d’occasion à partir d’une plaque d’immatriculation ou d’un VIN. L’objectif : ...

Laisser un commentaire