EXPLAIN QUERY PLAN
EXPLAIN QUERY PLAN montre comment SQLite compte exécuter une requête : parcours complet de table (SCAN) ou recherche par index (SEARCH). C'est le premier réflexe face à une requête lente.
- plan d'exécution
- EXPLAIN
- SCAN
- SEARCH
- performance
- optimisation
Syntaxe
EXPLAIN QUERY PLANSELECT ...;Exemple
CREATE INDEX idx_orders_customer ON orders (customer_id);EXPLAIN QUERY PLANSELECT * FROM orders WHERE customer_id = 1;-- Jeu de données : boutique-- Sans l'index, le plan serait : SCAN orders (lecture de toute la table).-- Seule la colonne detail est à lire, les trois premières sont des numéros internes.-- Résultat attendu (id | parent | notused | detail) :-- 3 | 0 | 61 | SEARCH orders USING INDEX idx_orders_customer (customer_id=?)À retenir
- Lecture du plan : SCAN parcourt toute la table, SEARCH … USING INDEX cible des lignes, USING COVERING INDEX lit tout depuis l'index sans toucher la table, USE TEMP B-TREE FOR ORDER BY signale un tri supplémentaire.
- Piège : sur une très petite table, le moteur peut préférer un SCAN même si un index existe, et il a raison. Testez sur un volume réaliste avant de conclure.
- Exécutez ANALYZE après un chargement massif : les statistiques collectées aident l'optimiseur à choisir le bon index.
- EXPLAIN seul, sans QUERY PLAN, affiche le bytecode interne de SQLite, rarement utile. Dans PostgreSQL, EXPLAIN ANALYZE exécute réellement la requête et donne les temps mesurés : attention sur un UPDATE ou un DELETE.
Voir aussi
- CREATE INDEXUn index est une structure triée, comme l'index d'un livre, qui permet de trouver des lignes sans parcourir toute la table. Il accélère lectures et jointures mais ralentit un peu les écritures.
- WHEREWHERE ne garde que les lignes qui vérifient une condition, avant tout regroupement. C'est le filtre de base pour cibler un client, une période, un statut ou une plage de valeurs.
- EXISTS & IN (sous-requête)EXISTS vérifie qu'une sous-requête renvoie au moins une ligne, IN qu'une valeur figure dans sa liste. Tous deux répondent à « a-t-il au moins un… ? » sans dupliquer les lignes comme le ferait un JOIN.