Les Index en Base de Données : Comment Ils Accélèrent les Requêtes SQL

Comprenez ce qu’est un index en base de données, comment il accélère les requêtes SQL, son coût caché et comment choisir les bonnes colonnes à indexer.

Partager sur Linkedin Partager sur WhatsApp

Temps de lecture estimé : 8 minutes

Image de l'article Les Index en Base de Données : Comment Ils Accélèrent les Requêtes SQL

Votre application fonctionnait parfaitement avec quelques centaines de lignes, puis, avec quelques millions, une simple recherche met plusieurs secondes à répondre. Dans de très nombreux cas, la solution tient en un mot : index. Bien utilisés, les index peuvent transformer une requête lente en requête quasi instantanée. Mal utilisés, ils alourdissent la base sans rien apporter.

Dans cet article, vous allez comprendre ce qu’est un index, comment il fonctionne, quand il est utile, ce qu’il coûte et comment choisir les colonnes à indexer dans une base de données relationnelle.

L’analogie de l’index d’un livre

Imaginez que vous cherchiez le mot « photosynthèse » dans un manuel de biologie de 600 pages. Sans index, vous devez feuilleter toutes les pages. Avec l’index en fin d’ouvrage, vous trouvez le mot dans une liste triée par ordre alphabétique, qui vous indique directement les numéros de pages concernées.

Un index de base de données suit exactement la même logique : c’est une structure séparée, triée selon une ou plusieurs colonnes, qui pointe vers l’emplacement des lignes correspondantes dans la table.

Que se passe-t-il sans index ?

Prenons une table clients et la requête suivante :

SELECT * FROM clients WHERE email = 'marie@exemple.fr';

Si aucune structure n’aide le moteur, il doit lire toutes les lignes de la table une par une pour vérifier la condition. C’est ce qu’on appelle un parcours complet de table (full table scan). Sur une petite table, ce n’est pas un problème ; sur des millions de lignes, cela devient coûteux, d’autant plus si la requête est exécutée très souvent.

Créer un index en SQL

La syntaxe de base est proche dans la plupart des systèmes (MySQL, PostgreSQL, SQL Server, SQLite…) :

CREATE INDEX idx_clients_email ON clients (email);

À partir de là, le moteur peut consulter l’index pour retrouver rapidement la ligne correspondant à l’adresse e-mail recherchée, au lieu de parcourir toute la table. Pour supprimer un index, on utilise DROP INDEX, avec une syntaxe qui varie légèrement selon le système.

Comment fonctionne un index : l’arbre B

La structure la plus utilisée par les bases relationnelles pour leurs index est l’arbre B (souvent une variante appelée B+ tree). Il s’agit d’un arbre équilibré dans lequel les valeurs sont maintenues triées :

  • la racine et les nœuds intermédiaires servent de panneaux indicateurs (« les valeurs de A à M sont à gauche, de N à Z à droite ») ;
  • les feuilles contiennent les valeurs indexées et une référence vers les lignes de la table.

Comme chaque nœud oriente vers une petite portion des données, le nombre d’étapes nécessaires pour trouver une valeur augmente très lentement avec la taille de la table (on parle de croissance logarithmique). C’est pour cela qu’un index reste efficace même sur des tables très volumineuses.

Autre avantage : les valeurs étant triées, un arbre B est aussi utile pour les recherches par intervalle (BETWEEN, >, <) et peut aider pour certains tris (ORDER BY).

Les principaux types d’index

TypeRôleExemple
Index de clé primaireCréé automatiquement par la plupart des systèmes pour garantir l’unicité de l’identifiantPRIMARY KEY (id)
Index uniqueInterdit les doublons dans la colonneCREATE UNIQUE INDEX ... (email)
Index simpleAccélère les recherches sur une colonneCREATE INDEX ... (ville)
Index compositePorte sur plusieurs colonnes, dans un ordre précisCREATE INDEX ... (nom, prenom)

Il existe aussi des types plus spécialisés selon les systèmes : index de hachage, index plein texte, index géographiques, etc. Pour débuter, l’arbre B couvre la grande majorité des besoins.

L’ordre compte dans un index composite

Un index sur (nom, prenom) est trié d’abord par nom, puis par prénom à l’intérieur de chaque nom, comme un annuaire téléphonique. Conséquence :

  • il est très efficace pour WHERE nom = 'Durand' ;
  • il est efficace pour WHERE nom = 'Durand' AND prenom = 'Léa' ;
  • il est généralement peu utile pour WHERE prenom = 'Léa' seul, car les prénoms ne sont pas triés globalement.

C’est ce qu’on appelle souvent la règle du préfixe le plus à gauche : placez en premier la colonne la plus utilisée dans vos filtres.

Le coût caché des index

Si les index sont si utiles, pourquoi ne pas indexer toutes les colonnes ? Parce qu’ils ont un prix :

  • Espace disque : chaque index est une structure supplémentaire à stocker.
  • Écritures plus lentes : à chaque INSERT, UPDATE ou DELETE, le moteur doit aussi mettre à jour tous les index concernés.
  • Maintenance : trop d’index rendent le schéma plus difficile à comprendre et à optimiser.

Il s’agit donc d’un compromis : on accélère les lectures au prix d’écritures un peu plus lentes. Pour une table très souvent lue et rarement modifiée, le compromis est généralement favorable.

Quelles colonnes indexer ?

  1. Les colonnes souvent utilisées dans les clauses WHERE.
  2. Les colonnes servant aux jointures, en particulier les clés étrangères.
  3. Les colonnes souvent utilisées pour trier ou regrouper (ORDER BY, GROUP BY).
  4. Les colonnes sélectives, c’est-à-dire avec beaucoup de valeurs différentes (un e-mail est très sélectif, un champ « oui/non » beaucoup moins).

Pièges courants qui empêchent l’utilisation d’un index

  • Appliquer une fonction à la colonne : WHERE UPPER(email) = '...' peut empêcher l’usage d’un index classique sur email.
  • Joker en début de motif : LIKE '%dupont' ne peut pas exploiter l’ordre de l’index, contrairement à LIKE 'dupont%'.
  • Conversions de type implicites : comparer une colonne texte à un nombre peut forcer une conversion qui bloque l’index.
  • Tables très petites : le moteur peut choisir de lire toute la table, ce qui est parfois plus rapide que de passer par l’index.

Vérifier avec EXPLAIN

La plupart des systèmes proposent une commande EXPLAIN qui affiche le plan d’exécution d’une requête : on y voit si le moteur fait un parcours complet ou utilise un index. C’est l’outil indispensable pour mesurer l’effet d’un index plutôt que de deviner.

EXPLAIN SELECT * FROM clients WHERE email = 'marie@exemple.fr';

Conclusion

Un index est une structure triée qui permet au moteur de trouver rapidement les lignes recherchées, comme l’index d’un livre. Il accélère fortement les lectures, mais consomme de l’espace et ralentit les écritures. La bonne démarche consiste à indexer les colonnes réellement utilisées dans les filtres, les jointures et les tris, à soigner l’ordre des index composites et à vérifier les résultats avec EXPLAIN.

Pour aller plus loin, Cursa propose des cours gratuits de bases de données et de SQL, avec certificat, pour vous entraîner à concevoir et optimiser vos propres bases à votre rythme.

Flexbox ou CSS Grid : Quand Utiliser l’Un ou l’Autre

Flexbox gère une dimension, Grid en gère deux. Comprenez la différence, les propriétés clés et comment combiner les deux dans un vrai projet.

RECHERCHEV et RECHERCHEX : Retrouver une Donnée dans un Tableau Excel

Apprenez à utiliser RECHERCHEV et RECHERCHEX dans Excel : syntaxe, différences, erreurs fréquentes et astuces pour des recherches fiables.

Comment un Modèle de Langage Génère du Texte : Tokens, Probabilités et Contexte

Découvrez comment fonctionne un modèle de langage : découpage en tokens, prédiction du mot suivant, fenêtre de contexte, hallucinations et bonnes pratiques.

Mémoire Virtuelle et Fichier d’Échange : Ce Qui Se Passe Quand la RAM Est Pleine

Comment un système d’exploitation fait tenir plus de programmes que la RAM ne peut en contenir, et pourquoi la machine ralentit.

Qu’est-ce qu’une API REST ? Le langage commun des applications

Comprendre les API REST : ressources, méthodes HTTP, codes de statut et bonnes pratiques, expliqués simplement.

Clés Primaires et Clés Étrangères : Comprendre les Relations entre Tables

Clé primaire, clé étrangère, intégrité référentielle : les notions de base pour organiser correctement une base de données relationnelle.

Git et le Contrôle de Version : Comprendre les Bases

Découvrez à quoi sert un système de contrôle de version, les commandes essentielles de Git et les bonnes pratiques pour travailler en équipe.

Qu’est-ce que le phishing et comment s’en protéger ?

Découvrez ce qu’est le phishing, comment reconnaître ces tentatives d’arnaque en ligne et quels réflexes adopter pour protéger vos données.