Встречается на собеседованиях • сегодня

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

Проблема N+1 запросов возникает, когда для получения связанных данных выполняется один основной запрос и N дополнительных запросов для каждой записи. В Python (особенно с ORM типа SQLAlchemy или Django ORM) это решается несколькими способами:

  1. Eager Loading - загрузка связанных данных одним запросом:
python
# 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()

text

2. **Batch Loading** - группировка запросов (например, в SQLAlchemy через `subqueryload`):
```python
from sqlalchemy.orm import subqueryload
users = session.query(User).options(subqueryload(User.posts)).all()
  1. Оптимизация вручную - иногда эффективнее сделать 2 запроса и соединить данные в коде.

Ключевое - загружать связанные данные сразу, а не лениво. В Django это select_related (для ForeignKey) и prefetch_related (для ManyToMany), в SQLAlchemy - joinedload, subqueryload.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы