api
performance
ai_generated
true
GraphQL query takes 30s+ with nested resolvers due to N+1 database queries
ID: api/graphql-n-plus-one-dataloader
90%Fix Rate
92%Confidence
3Evidence
2023-01-01First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| any | active | — | — | — |
Root Cause
GraphQL resolvers execute per-field per-item. A query returning 100 users with posts generates 101 SQL queries. DataLoader batching fixes this but must be per-request scoped.
genericWorkarounds
-
95% success Create DataLoader instances per-request in context
context = { userLoader: new DataLoader(ids => User.findByIds(ids)) } // new per request -
85% success Use query complexity analysis to reject expensive queries
depthLimit(10), createComplexityLimitRule(1000)
Dead Ends
Common approaches that don't work:
-
Add database indexes to speed up individual resolver queries
80% fail
Indexes help per-query speed but don't reduce the 100+ query count. The bottleneck is round-trip overhead.
-
Create a single global DataLoader instance
88% fail
DataLoader cache must be per-request. A global instance leaks data between users and grows unbounded.