Backend Matrix: post #2133 — TG.ME

⚠️ Главный убийца производительности: Проблема N+1 запросов

Классическая ловушка при работе с ORM (Django ORM, SQLAlchemy, Hibernate, Sequelize). Это ситуация, когда вместо одного умного запроса к базе данных твой бэкенд делает сотни мелких.

Представь, что нужно вывести 10 постов и имена их авторов.

Как ORM делает по умолчанию (Проблема N+1):
# 1 запрос: получает 10 постов
posts = Post.objects.all()

for post in posts:
# Еще 10 отдельных запросов: по одному на каждого автора!
print(post.title, post.author.name)

1 запрос для постов + 10 для авторов = 11 запросов к базе. А если постов будет 1000?

Как это чинится
Мы сразу говорим базе вытащить постов вместе с авторами через JOIN.
# Всего 1 ленивый запрос, который сразу соберет все данные
posts = Post.objects.select_related('author').all()

for post in posts:
print(post.title, post.author.name) # Данные уже в памяти, запросов к базе нет!
July 10, 2026 337 3