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.idColonnes avec forte sélectivité (beaucoup de valeurs distinctes).
Ne pas indexer les petites tables (full scan plus rapide).