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

Какие знаешь методы оптимизации запросов в Django ORM

В Django ORM есть несколько методов оптимизации запросов:

  1. select_related — для ForeignKey и OneToOne, делает JOIN в SQL:

    python
    books = Book.objects.select_related('author').all()  # 1 запрос вместо N+1
  2. prefetch_related — для ManyToMany и обратных ForeignKey, загружает связанные объекты отдельным запросом:

    python
    authors = Author.objects.prefetch_related('books').all()  
  1. only() и defer() — загружают только нужные поля:

    python
    books = Book.objects.only('title', 'author__name')  
  2. annotate() и aggregate() — вычисления на стороне БД:

    python
    from django.db.models import Count  
    authors = Author.objects.annotate(book_count=Count('books'))  
  3. Использование exists() и count() — для проверки наличия/количества без загрузки объектов:

    python
    if Book.objects.filter(author=author).exists(): ...  
  4. Индексы в моделях — ускорение поиска:

    python
    class Book(models.Model):  
        title = models.CharField(db_index=True)  
  5. bulk_create и bulk_update — массовые операции.

Избегайте N+1 проблем, проверяйте запросы через connection.queries или Django Debug Toolbar.

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

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

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

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