Как решается проблема N+1 запросов

Python Junior Без компании
Как решается проблема N+1 запросов
Ответы
Проблема N+1 запросов возникает, когда для получения связанных данных выполняется один основной запрос и N дополнительных запросов для каждой записи. В Python (особенно с ORM типа SQLAlchemy или Django ORM) это решается несколькими способами: - **Eager Loading** - загрузка связанных данных одним запросом: ``` # SQLAlchemy from sqlalchemy.orm import joinedload users = session.query(User).options(joinedload(User.posts)).all() # Django ORM users = User.objects.select_related('profile').prefetch_related('posts').all() ``` - **Batch Loading** - группировка запросов (например, в SQLAlchemy через `subqueryload`): ``` from sqlalchemy.orm import subqueryload users = session.query(User).options(subqueryload(User.posts)).all() ``` - **Оптимизация вручную** - иногда эффективнее сделать 2 запроса и соединить данные в коде. Ключевое - загружать связанные данные сразу, а не лениво. В Django это `select_related` (для ForeignKey) и `prefetch_related` (для ManyToMany), в SQLAlchemy - `joinedload`, `subqueryload`.