L'index SQL : de plusieurs secondes à quelques millisecondes
Sans index, la base lit chaque ligne. Avec un arbre trié, elle saute droit au but — quelques étapes au lieu d'un million. Mais l'index a un prix.
52s · 13 juillet 2026 · 2 min de lecture
En bref
Un index est une structure triée — presque toujours un arbre B — qui stocke une copie de colonnes avec un pointeur vers les lignes. Sans lui, la base parcourt toute la table en O(n). Avec lui, elle trouve une ligne en quelques étapes, même sur des millions. Le revers : chaque index ralentit les écritures et occupe de l'espace.
Sans index : le balayage complet
Cherche une ligne par e-mail dans une table d'un million de lignes, sans index : la base n'a aucune idée d'où elle se trouve. Elle lit donc la table du début à la fin, en comparant chaque ligne. C'est le balayage complet (sequential scan en PostgreSQL, full table scan en MySQL). Son coût grandit linéairement : deux fois plus de lignes, deux fois plus de travail.
Avec index : l'arbre B
Un index est une structure de données triée, presque toujours un arbre B (balanced tree), qui range les valeurs d'une colonne avec un pointeur vers chaque ligne. Le « B » veut dire « équilibré » : l'arbre reste bas même quand la table grossit. Résultat, la recherche se fait en O(log n) — une poignée d'étapes au lieu d'un parcours intégral. C'est l'index par défaut de PostgreSQL, MySQL/InnoDB, SQL Server et Oracle.
-- Sans index : balayage complet
SELECT * FROM users WHERE email = 'a@b.com';
-- On cree l'index
CREATE INDEX idx_users_email ON users(email);
-- Verifier le plan : on veut un Index Scan, pas un Seq Scan
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'a@b.com'; Le revers : ça coûte à l'écriture
Un index n'est pas gratuit. À chaque INSERT, UPDATE ou DELETE, la base doit aussi mettre à jour l'index — donc plus d'écritures et d'entrées-sorties. Il occupe aussi de l'espace disque, puisqu'il copie des colonnes triées. Multiplie les index sur une table très sollicitée en écriture, et tu transformes l'accélérateur en frein.
Ce qu'il accélère
- Les SELECT et les filtres WHERE
- Les jointures, les tris, l'unicité
Ce qu'il coûte
- Chaque INSERT, UPDATE, DELETE
- De l'espace disque
→ On indexe là où on lit beaucoup, pas par réflexe.
À retenir
- →Sans index, la base fait un balayage complet : elle lit chaque ligne (O(n)).
- →Un index est un arbre B trié : la recherche tombe en O(log n), quelques étapes même sur des millions de lignes.
- →C'est l'index par défaut de PostgreSQL, MySQL/InnoDB, SQL Server et Oracle ; l'analogie, c'est l'index d'un livre.
- →Le revers : chaque index ralentit les écritures et prend de l'espace — donc pas d'index partout.
Sources · la preuve
- [01] Index Architecture and Design Guide — SQL Server Microsoft Learn · learn.microsoft.com Structure en arbre B+ (root/leaf) ; compromis vitesse de requête, coût d'écriture, stockage.
- [02] Database Indexing: The Complete Guide Generalist Programmer · generalistprogrammer.com Balayage complet O(n), analogie du livre, compromis lecture/écriture.
- [03] What Are SQL Indexes and How Do They Work? Tutorial Reference · tutorialreference.com O(log n), index par défaut, inutile sur petites tables ou colonnes peu sélectives.
- [04] 7 SQL Indexing Rules That Cut Query Time by 90% AI2sql · ai2sql.io L'arbre B garantit un temps en log(N) ; une requête de 10 s peut tomber à quelques millisecondes.