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

MySQL, PostgreSQL, requetes, optimisation
sebastien57
Messages : 6
Inscription : mer. avr. 15, 2026 7:24 pm

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

Message 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.
admin_sys_gaming
Messages : 571
Inscription : sam. janv. 20, 2024 7:24 pm

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

Message 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.
flo34
Messages : 31
Inscription : mer. juil. 23, 2025 7:25 pm

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

Message 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.
sebastien57
Messages : 6
Inscription : mer. avr. 15, 2026 7:24 pm

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

Message 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é ?
admin_sys_gaming
Messages : 571
Inscription : sam. janv. 20, 2024 7:24 pm

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

Message 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.
la_mehdi57
Messages : 29
Inscription : mer. déc. 17, 2025 7:24 pm

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

Message 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.
Répondre