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

Что такое проблема N+1 в ORM

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

python
# Проблемный пример (Django ORM)
books = Book.objects.all()  # 1 запрос
for book in books:
    print(book.author.name)  # N запросов (по одному на каждую книгу)

Решение - использовать select_related (для ForeignKey) или prefetch_related (для ManyToMany):

python
# Оптимальное решение
books = Book.objects.select_related('author').all()  # 1 запрос с JOIN
for book in books:
    print(book.author.name)  # Данные уже загружены

Проблема характерна для всех ORM (SQLAlchemy, Django ORM и др.) и приводит к значительному падению производительности при работе с большими наборами данных.

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

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

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

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