Nâng CaoDatabase iconDatabase

EXPLAIN và EXPLAIN ANALYZE trong PostgreSQL dùng để làm gì?

EXPLAIN ANALYZE là công cụ chẩn đoán hiệu năng cốt lõi — đọc plan từ trong ra ngoài, so sánh estimated vs actual rows, tìm Seq Scan trên bảng lớn và chênh lệch rows lớn (cần ANALYZE).

  • EXPLAIN hiển thị execution plan mà planner dự định dùng mà không chạy query.
  • EXPLAIN ANALYZE thực sự chạy query và so sánh estimated vs actual — dùng trên production cẩn thận với DML. EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) cho thêm buffer hit/miss info.
  • Đọc plan từ trong ra ngoài, từ dưới lên trên — node trong cùng chạy trước.
  • Cost: (startup_cost..total_cost) là planner estimate, không phải milliseconds — dùng để so sánh tương đối.
  • Actual time: (actual time=0.043..1.2 rows=100).
  • Plan nodes quan trọng: Seq Scan — đọc toàn bộ table, tốt cho large % of rows hoặc small tables; Index Scan — dùng index rồi fetch table rows (random I/O); Index Only Scan — chỉ đọc index, không cần table (covering index, rất nhanh); Bitmap Index Scan + Bitmap Heap Scan — batch random reads thành sequential, tốt cho medium % of rows; Hash Join — build hash table từ smaller relation, probe với larger; Nested Loop — tốt khi outer là nhỏ và inner có index; Merge Join — tốt khi cả hai đã sorted.
  • Red flags: estimated rows vs actual rows chênh lệch lớn (stale statistics → ANALYZE table); Seq Scan trên bảng lớn trong WHERE condition → thiếu index; high Buffers read → data không trong cache.

Xem toàn bộ Database cùng filter theo level & chủ đề con.

Mở danh sách Database