Tous les articles

Les index de base de données, expliqués avec un annuaire téléphonique

Bases de données · 2 min de lecture ·

Chaque requête lente que j'ai corrigée revenait à la même image. Vous demandez à MySQL WHERE email = 'omar@example.com' et, sans index, elle ne peut faire qu'une seule chose :

table users · 1 000 000 lignes lit chaque ligne une à une comme chercher un nom dans un annuaire en lisant la page 1, puis la page 2, puis la page 3...
Un balayage complet de la table. Correct à 1 000 lignes, douloureux à 1 000 000.

Ce qu'est vraiment un index

Un index est une seconde structure, triée, à côté de votre table : un arbre B. Une chose triée se cherche par dichotomie, donc la base fait des sauts, pas des pas. Même requête, avec un index sur email :

A - Z A - M N - Z A - F G - M N - S T - Z saut 1 saut 2 saut 3 : trouvé. Trois lectures au lieu d'un million.
Recherche dans un arbre B : chaque saut divise l'espace de recherche par deux, au moins.

Quand ajouter un index

  • Les colonnes présentes dans le WHERE, le JOIN ... ON et l'ORDER BY de vos requêtes fréquentes.
  • Les clés étrangères, toujours.
  • Pas sur les colonnes que vous filtrez presque jamais : chaque index ralentit un peu les écritures.
Avant de deviner, lancez EXPLAIN sur la requête. Si vous voyez type: ALL, c'est le premier croquis : un balayage complet. Avec le bon index, ça devient ref ou range, le second croquis.

Le gain de 20% de performance que j'ai livré chez Getmayes tenait surtout à ça : lire la sortie d'EXPLAIN, dessiner l'arbre, et ajouter les quatre index que les requêtes réclamaient depuis le début.

Ce que disent les lecteurs

  1. Pas encore de mot. Le premier est toujours le plus courageux.
Vous construisez quelque chose du genre ? Je peux vous aider. Contact