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

MySQL, PostgreSQL, requetes, optimisation
zed.g
Messages : 166
Inscription : ven. oct. 03, 2025 7:24 pm

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

Message par zed.g »

Aidez-moi à sauver cette requête qui plante après 30s ! Elle joint 12 tables (dont 3 avec +10M lignes). EXPLAIN montre un problème de nested loops. J'ai déjà créé 5 indexes mais rien n'y fait. Version : MariaDB 10.6.
Dev le jour, gamer la nuit
webmaster59
Messages : 118
Inscription : dim. sept. 24, 2023 7:24 pm

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

Message par webmaster59 »

Poste ton EXPLAIN format=JSON. As-tu essayé avec des STRAIGHT_JOIN pour forcer l'ordre ? Et vérifie tes cardinalités, MariaDB a parfois des stats pourries.
zed.g
Messages : 166
Inscription : ven. oct. 03, 2025 7:24 pm

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

Message par zed.g »

Voici l'EXPLAIN : [exemple fictif]. Le problème vient clairement de la table 'transactions' où il scanne 8M lignes. J'ai pourtant un index sur (user_id, date)...
Dev le jour, gamer la nuit
mehdi1979
Messages : 26
Inscription : sam. avr. 27, 2024 7:25 pm

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

Message par mehdi1979 »

Ton index est peut-être mal choisi. Dans ce cas, un index couvrant avec tous les champs utilisés dans le WHERE et le SELECT serait mieux. Essaye (date, user_id, amount) INCLUDE (status).
zed.g
Messages : 166
Inscription : ven. oct. 03, 2025 7:24 pm

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

Message par zed.g »

Génial, ça marche ! La requête passe à 1.2s. J'ai aussi ajouté un INDEX HINT pour forcer cet index. Merci !
Dev le jour, gamer la nuit
webmaster59
Messages : 118
Inscription : dim. sept. 24, 2023 7:24 pm

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

Message par webmaster59 »

Attention aux hints, c'est fragile en prod. Configure plutôt ton optimizer_switch pour désactiver les mauvais plans. Et pense aux vues matérialisées si cette requête est fréquente.
Répondre