N+1 Resolution
also called DataLoader Problem
The default GraphQL execution behaviour in which each field resolver runs per item, producing one query per row instead of one query per request.
A query returning 100 orders, each resolving a customer, executes the customer resolver 100 times — 101 database queries where a REST endpoint with a join would issue one.
It is not an occasional inefficiency; it is the default behaviour of naive resolvers, and it is why GraphQL performance problems appear immediately at scale.
The standard remedy is batching and caching per request: DataLoader collects the individual key lookups within a tick, issues one batched query, and distributes results back to the waiting resolvers. Per-request caching additionally deduplicates repeated lookups of the same key.
The architectural point is that this is a prerequisite rather than an optimisation — a GraphQL service without it will not survive production traffic. It should be in the service template, not discovered later.