Optimisation d'une requête SQL avec 12 JOIN qui timeout
Optimisation d'une requête SQL avec 12 JOIN qui timeout
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
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.
Re: Optimisation d'une requête SQL avec 12 JOIN qui timeout
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
Re: Optimisation d'une requête SQL avec 12 JOIN qui timeout
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).
Re: Optimisation d'une requête SQL avec 12 JOIN qui timeout
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
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.