Какими методами вы использовали для повышения эффективности запросов в 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)