# N Plus One Query

> A defect in which a collection is fetched and then one further query is issued per item.

Record: `architecture:n-plus-one-query`
Kind: anti-pattern
Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)
Severity: discouraged
Scope: architecture_evolution
Canonical: https://banes-lab.com/ontology#architecture-n-plus-one-query

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Chatty Interface](https://banes-lab.com/records/architecture/chatty-interface.md) and before [Cache Poisoning by Design](https://banes-lab.com/records/architecture/cache-poisoning-by-design.md).

## Repair

- Refactored by: batch_fetch, join_or_include, preload, cache_projection
- Detected by: query_inside_loop, remote_call_inside_loop, query_count_scales_with_rows
- Violated by: Fetch a collection, then issue one query or remote call per item rather than fetching required related data intentionally.
- Measured by: queries per request as the row count grows
- Enforced by: query-count assertions in integration tests

## Severity

- [discouraged](https://banes-lab.com/records/vocabulary/severity-discouraged.md)

## Category

- [Anti-patterns](https://banes-lab.com/records/architecture-category/anti-patterns.md)

## Force

- [Architecture evolution](https://banes-lab.com/records/force/architecture-evolution.md)

## Negated by

- [Algorithmic Efficiency](https://banes-lab.com/records/architecture/algorithmic-efficiency.md)

## Linked from

- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/principles/architecture-category-scalability-performance-optimization.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/lexicon/lexicon-category-scalability-performance-optimization.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The forces](https://banes-lab.com/ontology/schema/the-forces.md)
