EXPLAIN ANALYZE je nejdůležitější optimalizační nástroj.
Použití¶
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id=123; EXPLAIN (ANALYZE, BUFFERS) SELECT …;
Scany¶
- Seq Scan — celá tabulka
- Index Scan — index + fetch
- Index Only Scan — jen index
- Bitmap — pro více řádků
Joins¶
- Nested Loop — malé tabulky
- Hash Join — velké bez indexu
- Merge Join — seřazená data
Optimalizace¶
- Přidat chybějící index
- ANALYZE pro statistiky
- Subquery → JOIN
- Zvýšit work_mem pro sorty
Čtení EXPLAIN výstupu¶
Při analýze EXPLAIN ANALYZE výstupu se zaměřte na rozdíl mezi estimated cost a actual time. Velký rozdíl signalizuje zastaralé statistiky — spusťte ANALYZE na příslušné tabulce. Seq Scan na velké tabulce s WHERE podmínkou obvykle znamená chybějící index.
Sledujte Buffers: shared hit vs shared read — vysoký poměr read znamená, že data nejsou v cache a čtou se z disku. Zvýšení shared_buffers může pomoci. Pro sort operace kontrolujte, zda se provádějí v paměti nebo na disku (Sort Method: external merge). V takovém případě zvyšte work_mem. Nástroj auto_explain s parametrem log_min_duration automaticky loguje pomalé dotazy s jejich plány, což je nezbytné pro produkční optimalizaci.
EXPLAIN = debugging dotazů¶
cost vs actual odhalí problémy.