PostgreSQL : ma requête est lente, comment lire EXPLAIN ANALYZE ?

poze 5 months ago89 gadefr

1

Une requête sur orders (5 millions de lignes) prend 8 secondes. On m'a dit d'utiliser EXPLAIN ANALYZE mais la sortie est illisible pour moi.

Anviwònman:PostgreSQL 16

Dyagnostik IA

Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.

poze 5 months ago

1 Repons

4
✓
✓ Repons yo aksepte

Lance :

EXPLAIN (ANALYZE, BUFFERS) SELECT ... ;

Puis cherche, de l'intérieur vers l'extérieur :

1. Seq Scan on orders avec un filtre qui élimine presque toutes les lignes (Rows Removed by Filter: 4999000) : il manque un index sur la colonne filtrée. 2. Écart entre rows= estimé et actual rows= (x100 ou plus) : statistiques obsolètes. Lance ANALYZE orders;. 3. Le nœud avec le plus grand actual time : c'est là que part le temps. 4. Sort Method: external merge Disk : le tri déborde sur disque. Augmente work_mem pour cette requête, ou ajoute un index qui fournit déjà l'ordre.

Pour un WHERE customer_id = $1 ORDER BY created_at DESC LIMIT 20, l'index idéal est composite :

CREATE INDEX CONCURRENTLY orders_customer_created_idx
  ON orders (customer_id, created_at DESC);

Colle ton plan sur explain.dalibo.com : il affiche le plan sous forme visuelle.

Konekte pou di lòt moun si li te mache.

answered 5 months ago

Sign in and verify your email to post an answer.