Docs học tập
Backend nền tảng

D5 · Vấn đề N+1 Query

Lặp truy vấn DB trong vòng lặp → 1 query lấy danh sách + N query lấy chi tiết.

D5 · Junior

Đi chợ mà mỗi món lại chạy về nhà lấy tiền một lần. Cách đúng: lấy đủ tiền một lần rồi mua hết.

Cốt lõi

  • Lặp truy vấn DB trong vòng lặp → 1 query lấy danh sách + N query lấy chi tiết.
  • Cách fix: SELECT * WHERE id IN (...), JOIN, Batch / Eager loading.

Đánh đổi

Hay gặp với ORM (Hibernate, Django). Eager loading quá tay lại kéo dư dữ liệu.

Trong thực tế

Newsfeed Instagram 10 query → gộp lại bằng JOIN.

Bug thường gặp

ORM lazy-load quan hệ trong vòng lặp: trang 50 dòng sinh 51 query – local chạy nhanh, production chậm.

Tự hỏi lại

Phát hiện N+1 bằng cách nào? (log số query/request, APM).

On this page