Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
Besoin d'aide sur une requête PostgreSQL qui prend 12 secondes à s'exécuter. J'ai 5 LEFT JOIN sur des tables de 100k à 1M d'entrées. EXPLAIN montre qu'il fait des seq scan sur certaines tables malgré les indexes. Des idées ?
Re: Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
As-tu vérifié si tes statistiques sont à jour avec ANALYZE ? Aussi, parfois PostgreSQL préfère un seq scan si tu récupères une grande partie de la table. Essaye de limiter les colonnes sélectionnées.
-
admin_sys_gaming
- Messages : 571
- Inscription : sam. janv. 20, 2024 7:24 pm
Re: Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
12 secondes c'est effectivement beaucoup. Tu pourrais partager ton plan d'exécution ? Peut-être qu'un CTE ou un réécriture avec des sous-requêtes pourrait aider.
Re: Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
Voici un extrait du EXPLAIN : il fait des scans séquentiels sur table1 et table3 alors qu'il y a des indexes. J'ai fait un ANALYZE hier. Voici la structure des JOIN... [détails techniques]
-
kernelpanic59
- Messages : 71
- Inscription : jeu. sept. 21, 2023 7:24 pm
Re: Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
D'après ce que je vois, ton problème vient probablement des cardinalités estimées. Essaye d'augmenter work_mem temporairement pour voir si le planner fait un meilleur choix. Sinon, des hints avec pg_hint_plan ?
Re: Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
Autre piste : as-tu essayé de réécrire en utilisant des INNER JOIN là où c'est possible ? Les LEFT JOIN sont souvent mal optimisés quand ils ne sont pas vraiment nécessaires.
Re: Optimisation d'une requête SQL avec plusieurs LEFT JOIN qui rame
Merci à tous ! Augmenter work_mem a déjà divisé le temps par 3. Je vais tester de remplacer deux LEFT JOIN par des INNER comme suggéré et voir l'impact.