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

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

N+1 проблема возникает, когда ORM делает множество запросов к БД вместо одного оптимального. Например, при загрузке списка сущностей и их связанных данных:

python
# Плохой пример: N+1 запросов
users = session.query(User).all()  # 1 запрос
for user in users:
    print(user.posts)  # N запросов (по одному на каждого пользователя)

Решение - использовать eager loading (жадную загрузку):

python
# Хороший пример: 1 запрос с JOIN
from sqlalchemy.orm import joinedload
users = session.query(User).options(joinedload(User.posts)).all()
for user in users:
    print(user.posts)  # Данные уже загружены

Проблема характерна для многих ORM (Django ORM, SQLAlchemy, Hibernate) и возникает из-за ленивой загрузки по умолчанию.

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

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

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

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