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.