N+1 query problem trong ORM là gì? Cách giải quyết trong Prisma?
N+1 problem là bug hiệu năng phổ biến nhất với ORM: query danh sách N items rồi loop lấy related data = N+1 queries — giải quyết bằng include (eager load) trong Prisma hoặc DataLoader pattern cho GraphQL.
N+1 problem: query 1 lần lấy list N items (1 query), rồi loop qua từng item để fetch related data (N queries) — tổng N+1 queries.
Ví dụ: lấy 100 users rồi lấy posts của từng user = 101 queries thay vì 1.
Cách phát hiện: enable query logging trong Prisma với log: ['query'] trong PrismaClient constructor — đếm số queries per request.
Giải quyết trong Prisma: dùng include để eager load (prisma.user.findMany({ include: { posts: true } })) — Prisma chạy 2 queries và merge; dùng select với nested select để lấy chỉ fields cần thiết; Prisma fluent API: user.posts() chạy lazy load — tránh trong loops.
DataLoader pattern cho GraphQL: batch nhiều individual loads thành một query duy nhất, ví dụ DataLoader của Facebook group tất cả userId requests trong một tick rồi batch fetch.
Prisma chưa có built-in DataLoader nhưng có thể dùng @paljs/plugins hoặc tự implement.
Xem toàn bộ Database cùng filter theo level & chủ đề con.