Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Ce qui rend une requête rapide

Après cette leçon: Je peux expliquer comment un index rend une requête plus rapide.

Leçon de 40 minAucune commande

Trois secondes de trop

Cycles Loire a grandi : la table des commandes compte maintenant deux millions de lignes. Au service client, chercher une commande par e-mail prend trois secondes. Pendant ce temps, le client attend au téléphone.

Un développeur ajoute une ligne de SQL. La même recherche devient instantanée. Cette ligne crée un index.

À la fin de cette leçon

Remarque

Je peux expliquer comment un index rend une requête plus rapide.

Mots clés

MotCe que ça veut direExemple
Parcours completlire toutes les lignes de la table, une par uneSCAN
Indexune liste triée qui mène directement aux bonnes lignes
Plan de requêtela façon dont la base prévoit de répondre
EXPLAIN QUERY PLANdemande le plan sans lancer la requête
Écritureun ajout, une modification ou une suppression de ligne

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Sans index, la base lit tout

Vous cherchez la commande de [email protected]. La table n'est pas rangée par e-mail.

La base n'a donc qu'une solution : lire la première ligne, puis la deuxième, et ainsi de suite. C'est un parcours complet. Sur six lignes, personne ne le remarque. Sur deux millions de lignes, cela se sent à chaque recherche.

Un index est comme celui d'un livre

À la fin d'un manuel, l'index liste les mots dans l'ordre alphabétique, avec un numéro de page. Vous ne lisez pas tout le livre. Vous allez au mot, puis à la page.

Un index de base de données fait la même chose. Il range les e-mails dans l'ordre, chacun avec sa ligne. La base trouve l'e-mail en quelques étapes, puis va droit à la ligne.

Exemple détaillé : combien de lignes lues ?

Lignes dans la tableParcours complet, au pireAvec un index, environ
1 0001 000 lignes10 étapes
1 000 0001 000 000 lignes20 étapes
2 000 0002 000 000 lignes21 étapes

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

EXPLAIN QUERY PLAN montre le chemin choisi

Vous pouvez demander à la base comment elle va répondre. Placez EXPLAIN QUERY PLAN devant la requête. Elle ne rend pas les commandes, elle décrit son plan.

SCAN veut dire parcours complet. SEARCH ... USING INDEX veut dire qu'elle passe par un index. Lancez les deux blocs suivants et comparez.

Essayez : le plan sans index

Code: sql
-- Comment la base va-t-elle chercher cette cliente ?
EXPLAIN QUERY PLAN
SELECT * FROM commandes WHERE email = '[email protected]';

-- Lisez la colonne detail : SCAN veut dire parcours complet.

Essayez : le plan avec un index

Code: sql
-- On crée un index sur la colonne email.
CREATE INDEX idx_commandes_email ON commandes(email);

-- Même question qu'avant.
EXPLAIN QUERY PLAN
SELECT * FROM commandes WHERE email = '[email protected]';

-- Le plan dit maintenant SEARCH ... USING INDEX.

Une erreur fréquente

Attention

Beaucoup pensent qu'il suffit d'indexer toutes les colonnes. C'est faux. Chaque index prend de la place, et chaque écriture doit le mettre à jour. Trop d'index ralentissent les ajouts de commandes. Indexez les colonnes que vous cherchez souvent dans un WHERE ou un JOIN.

À vous : indexer la ville

Code: sql
-- Le service commercial cherche souvent par ville.
EXPLAIN QUERY PLAN
SELECT * FROM commandes WHERE ville = 'Rennes';

-- Écrivez ici un CREATE INDEX pour la colonne ville,
-- puis copiez la requête EXPLAIN en dessous et relancez.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.