Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

MySQL, PostgreSQL, requetes, optimisation
toto_tech
Messages : 365
Inscription : ven. avr. 17, 2026 7:24 pm

Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par toto_tech »

J'ai une requête de reporting qui joint 12 tables (dont certaines avec +20M lignes). Elle prend 45 secondes même avec des indexes. Des idées pour l'optimiser ? Je peux partager l'EXPLAIN si besoin.
Sauvegardez, bon sang
sofiane_dev
Messages : 177
Inscription : ven. mai 29, 2026 7:24 pm

Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par sofiane_dev »

12 JOIN c'est beaucoup... As-tu envisagé de denormaliser certaines données ? Ou de pré-calculer des agrégats la nuit ?
le_zed62
Messages : 95
Inscription : ven. avr. 19, 2024 7:25 pm

Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par le_zed62 »

Poste ton plan d'exécution. Souvent le problème vient de l'ordre des JOIN mal choisi par l'optimiseur. Avec des hints tu peux forcer un meilleur chemin.
toto_tech
Messages : 365
Inscription : ven. avr. 17, 2026 7:24 pm

Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par toto_tech »

Voici l'extrait critique du EXPLAIN : -> Nested Loop Inner Join (cost=152874.32..583221.47 rows=1) -> Index Scan using idx_user on users (cost=0.43..8.45 rows=1) -> Materialize (cost=152873.89..152873.89 rows=1)
Sauvegardez, bon sang
la_vincent31
Messages : 42
Inscription : sam. juil. 06, 2024 7:25 pm

Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par la_vincent31 »

Le MATERIALIZE te tue. Essaie de remplacer ta sous-requête par un LEFT JOIN avec LATERAL. Et vérifie que tes stats sont à jour avec ANALYZE.
sofiane_dev
Messages : 177
Inscription : ven. mai 29, 2026 7:24 pm

Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par sofiane_dev »

Je plussoie pour les LATERAL JOIN. Sinon as-tu testé avec des indexes couvrants ? Pour ce genre de requête, ça peut diviser le temps par 10.
toto_tech
Messages : 365
Inscription : ven. avr. 17, 2026 7:24 pm

Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes

Message par toto_tech »

Merci pour les conseils ! Le LATERAL a effectivement fait passer la requête à 7s. Je vais tester les indexes couvrants demain.
Sauvegardez, bon sang
Répondre