فرض کنید ۱۰۰ سفارش را میخوانید و برای نمایش نام مشتری هر سفارش، یک کوئری جدا میزنید. نتیجه: ۱ + ۱۰۰ کوئری. این مشکل N+1 است و با رشد داده، سرعت را خراب میکند.
// بد: N+1
const orders = await Order.findAll();
for (const o of orders) {
o.customer = await Customer.findByPk(o.customerId);
}
// بهتر: یک کوئری با include/JOIN
const orders = await Order.findAll({ include: Customer });راهحلها
- بارگذاری رابطه با JOIN یا eager loading در ORM.
- یک کوئری جداگانه با
WHERE id IN (...)برای همهٔ رابطهها. - استفاده از DataLoader در GraphQL.
برای کشف آن، لاگ کوئریها را فعال کنید یا تعداد کوئری هر درخواست را در محیط توسعه بشمارید.




