Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes
Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes
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
12 JOIN c'est beaucoup... As-tu envisagé de denormaliser certaines données ? Ou de pré-calculer des agrégats la nuit ?
Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes
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.
Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes
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
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
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.
Re: Optimisation d'une requête SQL avec 12 JOIN qui rame sur 20M de lignes
Merci pour les conseils ! Le LATERAL a effectivement fait passer la requête à 7s. Je vais tester les indexes couvrants demain.
Sauvegardez, bon sang