Ce billet explique comment optimiser les performances d’un blog Symfony utilisant Doctrine et PostgreSQL 16 en analysant les requêtes avec l’outil EXPLAIN. L’auteur détaille l’utilisation de EXPLAIN (ANALYZE, BUFFERS) pour examiner les plans d’exécution, identifier des problèmes comme le N+1 masqué par le cache, et vérifier l’efficacité des index via pg_stat_user_indexes. Sur les 47 index de la base, seuls 14 sont réellement utilisés, illustrant l’importance de cibler les optimisations.
L’article montre comment interpréter les plans d’exécution, comme un Index Scan pour une requête par slug ou un Seq Scan inefficace pour une jointure de catégorie. Il souligne que PostgreSQL privilégie la stratégie la moins coûteuse, même si un index existe, et met en lumière des fonctionnalités comme Memoize pour éviter des lectures redondantes. L’analyse révèle aussi des requêtes mal optimisées, comme une jointure forçant un parcours complet de table.
Enfin, le billet insiste sur la nécessité de combiner EXPLAIN et les outils de profilage Symfony pour corriger les requêtes problématiques avant de vérifier en production. L’exemple concret du flux RSS démontre comment PostgreSQL optimise automatiquement certaines opérations, tout en rappelant que chaque index doit justifier son existence par une utilisation réelle.