Page 1 sur 1

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

Publié : jeu. mars 13, 2025 3:08 pm
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.

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

Publié : jeu. mars 13, 2025 5:08 pm
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 ?

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

Publié : jeu. mars 13, 2025 6:08 pm
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.

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

Publié : jeu. mars 13, 2025 7:08 pm
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)

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

Publié : ven. mars 14, 2025 12:08 am
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.

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

Publié : ven. mars 14, 2025 3:08 am
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.

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

Publié : ven. mars 14, 2025 1:08 pm
par toto_tech
Merci pour les conseils ! Le LATERAL a effectivement fait passer la requête à 7s. Je vais tester les indexes couvrants demain.