Apprenez à être maître de vos données ! Mis à jour le 29 juillet 2026
Performance · 29 juillet 2026 · 9 min de lecture

Comprendre les index SQL : comment ils accélèrent (ou ralentissent) vos requêtes

Un index SQL, c'est un peu comme l'index d'un livre : au lieu de lire toutes les pages pour trouver un mot, on consulte une structure triée qui pointe directement vers le bon endroit. Bien utilisé, un index transforme une requête de plusieurs secondes en quelques millisecondes. Mal utilisé, il ralentit les écritures et gaspille de l'espace disque.

Sans index : le scan complet

Sans index, le moteur SQL doit lire chaque ligne de la table pour trouver celles qui correspondent à votre condition. C'est ce qu'on appelle un full table scan. Sur une table de 10 millions de lignes, chercher une seule ligne par son identifiant devient très coûteux.

-- Sans index sur "email", cette requête lit toute la table
SELECT * FROM utilisateurs WHERE email = 'julie@exemple.com';

Avec index : la structure B-Tree

La plupart des moteurs (PostgreSQL, MySQL/InnoDB, SQL Server) utilisent par défaut une structure d'arbre équilibré appelée B-Tree. Les valeurs indexées sont triées, ce qui permet de localiser une ligne en un nombre d'étapes logarithmique plutôt que linéaire.

CREATE INDEX idx_utilisateurs_email ON utilisateurs (email);

-- La même requête devient beaucoup plus rapide
SELECT * FROM utilisateurs WHERE email = 'julie@exemple.com';

Avec cet index, le moteur retrouve la ligne en quelques comparaisons au lieu de parcourir toute la table.

Quand créer un index

  • Colonnes utilisées fréquemment dans des clauses WHERE
  • Colonnes utilisées dans des conditions de jointure (ON)
  • Colonnes utilisées pour trier les résultats (ORDER BY)
  • Clés étrangères, qui sont presque toujours interrogées

Quand éviter un index

Un index n'est pas gratuit : chaque INSERT, UPDATE ou DELETE doit aussi mettre à jour tous les index concernés. Sur une table très écrite et peu lue, trop d'index peuvent ralentir les écritures de façon significative.

Astuce : évitez d'indexer des colonnes à faible cardinalité (par exemple une colonne booleen actif avec seulement deux valeurs possibles) : le gain est souvent minime, voire négatif.

Index composites

Quand une requête filtre sur plusieurs colonnes à la fois, un index composite (multi-colonnes) est souvent plus efficace qu'un index par colonne.

CREATE INDEX idx_commandes_client_date
ON commandes (client_id, date_commande);

SELECT * FROM commandes
WHERE client_id = 42 AND date_commande >= '2026-01-01';

L'ordre des colonnes compte : cet index est très efficace pour filtrer par client_id seul ou par client_id + date_commande, mais peu utile pour filtrer uniquement par date_commande.

Vérifier qu'un index est utilisé

Utilisez EXPLAIN (ou EXPLAIN ANALYZE) pour voir le plan d'exécution choisi par le moteur et confirmer qu'il utilise bien l'index attendu plutôt qu'un scan complet.

EXPLAIN ANALYZE
SELECT * FROM utilisateurs WHERE email = 'julie@exemple.com';
← Article précédent : Les jointures SQL Article suivant : Les sous-requêtes →
Publicité