Sobes.tech
Back to questions
Junior — Middle
49

Какими методами вы использовали для повышения эффективности запросов в Django?

Answer from AI

sobes.tech AI

Для повышения эффективности запросов в Django я использовал следующие методы:

  • select_related() — для жадной загрузки связанных объектов через внешние ключи, что уменьшает количество SQL-запросов.

  • prefetch_related() — для предварительной загрузки связанных объектов, особенно при работе с отношениями многие-ко-многим.

  • values() и values_list() — для выборки только нужных полей, что снижает объём передаваемых данных.

  • annotate() и aggregate() — для выполнения вычислений на уровне базы данных, уменьшая нагрузку на Python.

  • Использование индексов — добавление индексов на поля, по которым часто фильтруют или сортируют.

  • Кэширование — применение кэширования результатов запросов с помощью Django cache framework.

Пример использования select_related():

# Без select_related: будет N+1 запрос
books = Book.objects.all()
for book in books:
    print(book.author.name)

# С select_related: один запрос с join
books = Book.objects.select_related('author').all()
for book in books:
    print(book.author.name)