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

Какие возникали замедления при использовании Django ORM

Основные причины замедлений в Django ORM:

  1. N+1 проблема - когда для каждого объекта делается отдельный запрос к связанной таблице. Решается select_related() (ForeignKey) и prefetch_related() (ManyToMany).
python
# Плохо - N+1 запросов
books = Book.objects.all()
for book in books:
    print(book.author.name)  # Отдельный запрос для каждого автора

Хорошо - 1 запрос

books = Book.objects.select_related('author').all()

text

2. **Неоптимальные запросы** - ORM иногда генерирует сложные SQL. Решение - использовать `only()`, `defer()` для выбора конкретных полей.

3. **Большие выборки** - загрузка всех записей разом (`all()`). Лучше использовать `iterator()` или пагинацию.

4. **Отсутствие индексов** - медленные запросы из-за отсутствия индексов на часто фильтруемых полях.

5. **Аннотации и агрегации** - сложные вычисления на стороне Python вместо SQL. Решение - делать агрегацию в БД через `annotate()`/`aggregate()`.

6. **Медленные транзакции** - долгие операции в транзакциях блокируют таблицы. Решение - разбивать на мелкие транзакции.

Профилирование через `connection.queries` или Django Debug Toolbar помогает находить узкие места.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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