Objectif : accéder rapidement aux données sans parcourir toute la table.

Joue le rôle de sommaire : indique où se trouvent les données.

Donne l’adresse physique : fichier, bloc, position dans le bloc.

Mis à jour automatiquement lors des INSERT, UPDATE, DELETE.

Compromis : optimisation des lectures mais coût en espace et temps d’écriture.

Types d’index

Index sur une colonne :

CREATE INDEX idx_clients_id ON clients(id);

Index composite (plusieurs colonnes) :

CREATE INDEX idx_clients_nom_prenom ON clients(nom, prenom);

Index sur fonction :

CREATE INDEX idx_clients_code ON clients(SUBSTR(code, 3, 2));

Structure B-tree

Oracle utilise des index B-tree par défaut.

Structure arborescente équilibrée permettant des recherches en O(log n).

graph TD
    A[Racine: 50] --> B[Branche: 25]
    A --> C[Branche: 75]
    B --> D[Feuille: 10, 20, 30]
    B --> E[Feuille: 35, 40, 45]
    C --> F[Feuille: 60, 65, 70]
    C --> G[Feuille: 80, 90, 100]

Les feuilles contiennent les valeurs indexées et les rowid (adresses physiques).

Quand créer un index

Colonnes utilisées dans les WHERE :

SELECT * FROM clients WHERE nom = 'Dupont';
-- Index sur nom recommandé

Colonnes utilisées dans les JOIN :

SELECT * FROM commandes c
JOIN clients cl ON c.client_id = cl.id;
-- Index sur c.client_id et cl.id

Colonnes avec forte sélectivité (beaucoup de valeurs distinctes).

Ne pas indexer les petites tables (full scan plus rapide).