Sobes.tech
Junior — Middle

Como surge o problema N+1 ao usar ORM?

sobes.tech IA

Resposta da IA

O problema N+1 ocorre quando o ORM, ao carregar uma coleção de objetos relacionados, executa uma consulta para a entidade principal (1), e depois, para cada um dos N objetos relacionados, executa uma consulta separada ao banco de dados.

Por exemplo, se tiver uma lista de utilizadores e desejar obter os seus endereços, o ORM pode primeiro executar uma consulta para obter todos os utilizadores, e depois, para cada utilizador, executar uma consulta separada para obter o endereço. No total, são 1 (utilizadores) + N (endereços) consultas.

Isto leva a uma redução significativa no desempenho devido ao grande número de consultas.

Para evitar este problema, utiliza-se o carregamento ansioso (eager loading) ou consultas combinadas com JOIN, por exemplo, no SQLAlchemy:

utilizadores = session.query(User).options(joinedload(User.addresses)).all()

Isto permite carregar os utilizadores e os seus endereços numa única consulta.