Leçons du module (2/4)
EXPLAIN et ANALYZE
Vous êtes-vous déjà demandé comment la base de données choisit d'utiliser ou non le bel index que vous venez de créer ? Dès que vous appuyez sur Entrée pour une requête (par exemple, une longue jointure avec un groupe chaîné par), le Query Planner calcule des dizaines de stratégies à la volée pour exécuter la requête et sélectionne celle que l'on croit, en théorie, la plus rapide.
Mais en tant que développeur, vous devez être capable de regarder dans l'esprit sombre du planificateur de requêtes.
EXPLIQUER
Pour découvrir comment le Planner compte procéder, il suffit de mettre le mot magique EXPLAIN au début de votre requête.
EXPLAIN SELECT * FROM orders WHERE status = 'delivered';Le résultat ne sera pas les commandes ! Au lieu de cela, vous verrez le plan en sortie (avec des statistiques estimées) :
Seq Scan on orders (cost=0.00..25.88 rows=15 width=40)
Filter: (status = 'delivered'::text)Cela nous dit :
- Le planificateur utilisera un Seq Scan (lecture brute et séquentielle de l'intégralité du disque). C'est mauvais s'il y a des milliards de commandes.
- Il estime qu'environ 15 lignes seront renvoyées et calcule le « coût » en cycles CPU préchargés.
EXPLIQUER ANALYSER
Alors qu'EXPLAIN s'appuie sur des suppositions algorithmiques (basées sur des statistiques globales calculées au cours des dernières heures sur les données), EXPLAIN ANALYZE exécute en fait la requête pour de vrai (et attend les résultats logiques complets), en comparant le temps réel écoulé en termes mathématiques absolus.
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 90;Index Scan using idx_orders_cust on orders (cost=0.15..8.13 rows=4 width=40) (actual time=0.012..0.015 rows=4 loops=1)
Index Cond: (customer_id = 90)
Planning Time: 0.081 ms
Execution Time: 0.033 msHourra! Vous apprenez ici que la base de données a décidé d'appliquer un Index Scan sur notre index secondaire idx_orders_cust, prenant un temps d'exécution microscopique d'un millième de seconde, sautant des millions de lignes à la volée.
A ton tour
Écrivez une commande EXPLAIN de base pour découvrir comment PostgreSQL a l'intention de trouver des produits avec un stock actuel inférieur à 10 unités. (N'utilisez pas ANALYZE dans cette étape.)
Afficher l'indice
Ajoutez simplement le mot EXPLAIN au début de l’instruction existante.
Solution disponible après 3 tentatives
Obtenir des statistiques véridiques
Nous voulons un véritable diagnostic de performance (timings et cycles), pas une esquisse mathématiquement devinée. Utilisez l'instruction dédiée pour étudier, en l'exécutant réellement, la recherche de TOUS les 'clients' inscrits avant le 1er janvier 2025 ("signed_up_on" < '2025-01-01').
Afficher l'indice
Ajoutez le mot ANALYSER juste après EXPLIQUER.
Solution disponible après 3 tentatives