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).