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

Как избавиться от N плюс 1

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

  1. Жадная загрузка (Eager Loading) - загружаем связанные данные одним запросом:
python
# SQLAlchemy
users = session.query(User).options(joinedload(User.posts)).all()

Django ORM

users = User.objects.select_related('profile').prefetch_related('posts').all()

text

2. **Пакетная загрузка** - если жадная загрузка не подходит, используйте `in_bulk()` или ручную агрегацию:  
```python
# Django
posts = Post.objects.filter(user_id__in=[u.id for u in users])
posts_dict = {p.user_id: p for p in posts}
  1. Оптимизация запросов - анализируйте логи ORM (например, django-debug-toolbar) и избегайте .all() без необходимости.

Ключевое: минимизировать количество запросов, загружая связанные данные заранее.

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

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

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

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