patternMajor
Database N+1 query problem detection and solutions
Viewed 0 times
N+1 queryeager loadingDataLoaderselect_relatedprefetch_relatedjoinedloadinclude
nodejsbrowser
Problem
Application makes 1 query to fetch a list, then N additional queries to fetch related data for each item. Results in hundreds of queries for a single page load. Common with ORMs.
Solution
Detection: enable query logging and count queries per request. Solutions: (1) Eager loading: Prisma include/select, Django select_related/prefetch_related, SQLAlchemy joinedload. (2) Batch loading: DataLoader pattern. (3) Raw JOIN query when ORM eager loading is insufficient. (4) Denormalize if read-heavy. Rule: a page should make O(1) or O(types) queries, never O(items).
Why
ORMs default to lazy loading for simplicity. Each attribute access on a related object triggers a separate query. This is invisible until you profile or enable query logging.
Revisions (0)
No revisions yet.