Page 1 sur 1

Optimisation d'une requête SQL avec 5 LEFT JOIN qui timeout

Publié : ven. sept. 27, 2024 11:17 pm
par sebastien57
Aidez-moi à sauver cette requête : 5 LEFT JOIN sur des tables de 1 à 5M lignes. Timeout après 30s. J'ai des indexes sur les FK, mais EXPLAIN montre des 'nested loops' coûteux. PostgreSQL 14.

Re: Optimisation d'une requête SQL avec 5 LEFT JOIN qui timeout

Publié : sam. sept. 28, 2024 1:17 am
par admin_sys_gaming
Classique ! As-tu essayé de forcer un HASH JOIN avec 'SET enable_nestloop = off' ? Sur des gros datasets, ça peut diviser le temps par 10. Mais vérifie ta config work_mem avant.

Re: Optimisation d'une requête SQL avec 5 LEFT JOIN qui timeout

Publié : sam. sept. 28, 2024 5:17 am
par flo34
Les LEFT JOIN sont-ils vraiment nécessaires ? Chaque LEFT JOIN non utilisé rajoute un scan inutile. Parfois, pré-aggreger en CTE ou sous-requête est plus efficace.

Re: Optimisation d'une requête SQL avec 5 LEFT JOIN qui timeout

Publié : sam. sept. 28, 2024 6:17 am
par sebastien57
Bonne question : seulement 3 JOIN sont essentiels. Je vais restructurer avec des CTEs. Pour enable_nestloop, ça marche mais bouffe 4GB de RAM... Dois-je augmenter work_mem ou c'est risqué ?

Re: Optimisation d'une requête SQL avec 5 LEFT JOIN qui timeout

Publié : sam. sept. 28, 2024 2:17 pm
par admin_sys_gaming
Augmente work_mem MAIS seulement pour cette requête (via SET LOCAL). En prod, on a des requêtes à 8GB temporairement. Teste aussi avec 'EXPLAIN ANALYZE' pour voir le vrai coût.

Re: Optimisation d'une requête SQL avec 5 LEFT JOIN qui timeout

Publié : sam. sept. 28, 2024 8:17 pm
par la_mehdi57
Autre piste : materialized views pour les tables les plus jointes. On a réduit un cas similaire de 25s à 800ms comme ça. Rafraîchissement toutes les heures suffisait pour notre besoin.