Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

MySQL, PostgreSQL, requetes, optimisation
cedric_du_06
Messages : 69
Inscription : mer. mai 15, 2024 7:24 pm

Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par cedric_du_06 »

Je dois joindre 8 tables (entre 50K et 2M lignes chacune) pour un rapport. Ma requête prend 12s même avec des indexes. Des techniques pour gagner un ordre de grandeur ? (MySQL 8.0 InnoDB)
le_noob62
Messages : 55
Inscription : dim. janv. 26, 2025 7:24 pm

Re: Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par le_noob62 »

Déjà, est-ce que toutes les jointures sont vraiment nécessaires ? Souvent on peut pré-agréger des tables avant de joindre. Sinon, as-tu essayé les indexed views ?
cedric_du_06
Messages : 69
Inscription : mer. mai 15, 2024 7:24 pm

Re: Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par cedric_du_06 »

Je ne peux pas pré-agréger car j'ai besoin des détails. Les vues indexées ne sont pas supportées sur InnoDB il me semble ?
david62
Messages : 113
Inscription : mar. sept. 09, 2025 7:24 pm

Re: Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par david62 »

Change ton moteur en MyISAM le temps du rapport ! Ou mieux : extrait les données brutes et fais le traitement dans une appli. 8 JOINs c'est l'enfer pour l'optimiseur.
cedric_du_06
Messages : 69
Inscription : mer. mai 15, 2024 7:24 pm

Re: Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par cedric_du_06 »

MyISAM n'est pas une option (transactions nécessaires). Par contre j'ai testé avec des CTE et ça descend à 4s. Peut mieux faire ?
guillaume76
Messages : 6
Inscription : jeu. mars 14, 2024 7:25 pm

Re: Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par guillaume76 »

Astuce peu connue : crée une table temporaire avec les IDs dont tu as besoin, puis indexe-la avant tes JOINs. J'ai gagné 70% sur un cas similaire.
RTFM avant de poster (moi le premier)
le_noob62
Messages : 55
Inscription : dim. janv. 26, 2025 7:24 pm

Re: Optimisation requête SQL avec 8 LEFT JOIN : passer de 12s à <1s ?

Message par le_noob62 »

Si tu es en 8.0, teste aussi SET optimizer_switch='block_nested_loop=off' pour forcer les hash joins. Mais attention à la conso mémoire !
Répondre