Performance ORM SQL

O que é o N+1?

Entenda o que é o problema do N+1
Postado em: 09/07/2025 Por Carlos Salles
O que é o N+1?

Vamos dizer que você tenha duas tabelas, categorias e artigos. Você quer listar todos os artigos de cada categoria, como você faria?

Sem recorrer a código poderíamos dizer que:

  • Selecionaríamos as categorias; (1 Consulta)
  • Para cada categoria, buscaríamos todos os seus artigos. (N Consultas)

Ou seja, 1 Consulta + N Consultas!

Por que chamam de N+1 se é 1+N?

Em resumo, convenção. Mas se você, como eu, não se contenta com uma resposta tão simples, existe uma possível explicação.

Foi convencionado que o N fosse colocado antes para dar foco no problema real, que são as N consultas desnecessárias.

Então tecnicamente é 1+N, mas convencionou-se chamar de N+1.

Carlos Salles
Não consegui encontrar fontes que tratem da definição formal como N+1 e não 1+N, ou que citem literalmente essa possível explica, acredito então tratar-se de uma convenção informal por uso.

Por que isso é um problema?

O N+1 não é um problema per se, mas pode torna-se um problema em bases maiores afetando bastante a performance.

Carlos Salles
Numa base legada, eu provavelmente só corrigiria se realmente estivesse afetando a performance. Já num código novo eu tentaria evitar por padrão.

É importante também entender que quando falamos N não temos a real dimensão do problema, mas se definirmos N, percebemos que podem ser dezenas, centenas, milhares, milhões, bilhões... de requisições.

Então aquela pensa consulta que traz só os dados de produto seria executada N - centenas, milhares, milhões de - vezes.

Como se isso já não bastasse, teoricamente a cada uma das N consultas ele vai e volta do banco de dados, logo, além do tempo de cada uma das N consultas, somamos o tempo da latência de comunicação com o banco de dados.

Rapidamente as coisas passam a escalar ainda mais, então pra ficar mais fácil de visualizar, faremos um calculo simplificado.

Calculando

Temos a fórmula:

1 = Primeira Consulta
N = Consultas Subsequentes
T = Tempo da Consulta
L = Latencia

Tempo total = T1 + L1 + ((TN + LN) * N)
Carlos Salles
Provavelmente temos outras variáveis, mas para fins didáticos, apenas essas já conseguem demostrar como a performance escala.

Usando a formula, vamos considerar os seguintes valores:

Tempo da primeira consulta: 50 ms
Latência da primeira consulta: 20 ms
Tempo de cada consulta N: 10 ms
Latência de cada consulta: 5 ms

Tempo total = T1 + L1 + ((TN + LN) * N)
Tempo total = 50ms + 20ms + ((10ms + 5ms) * N)
Tempo total = 70ms + (15ms * N)
  • Para 10 registros220 ms
  • Para 100 registros1.570 ms
  • Para 1.000 registros15.070 ms

Como é possível ver com apenas 1000 registros, que não é um numero difícil de atingir num banco de dados, já chegamos aos 15 segundos. Algo inaceitável nos tempos de hoje.

Mas os ORMs já não resolvem isso?

Sim e não, os ORMs tem várias maneiras de resolver isso implementadas, mas cabe ao desenvolvedor saber o momento e a maneira correta de utiliza-las.

Inclusive é muito comum que esse problema seja relacionado justamente ao uso de ORMs, que carregam os relacionamentos no objeto (dai Object Relational Model) por trás dos panos.

Se os relacionamentos não forem configurados corretamente, vão gerar diversos N+1.

Conclusão

Encerrarei este post por aqui para que não fique muito grande, mas o objetivo foi cumprido, entender o que é o N+1 e porque ele é um problema.

Em próximos posts vou entrar mais no detalhe de como percebe-lo e resolve-lo!

Fontes

SQLAlchemy - Relationship Loading Techniques
Planet Scale - What is the N+1 Query Problem and How to Solve it?

Últimos Posts

Veja mais
Particulas - 2 de Junho de 2026
Particula AI Hacker Clube Comunidade Mentoria

Particulas - 2 de Junho de 2026

Jun 02

Particulas - 9 de Dezembro de 2025
Particula Git Qualidade de Código Refinamento

Particulas - 9 de Dezembro de 2025

Dec 09

Particulas - 8 de Dezembro de 2025
Particula Livros Liderança IA

Particulas - 8 de Dezembro de 2025

Dec 08

© 2026 Codiggo. Todos os direitos reservados.