Как оптимизировать запрос обратного внешнего ключа DjangoORM?

#django #postgresql #django-orm

#джанго #postgresql #джанго-орм

Вопрос:

У меня есть следующие отношения:

введите описание изображения здесь

Я пытаюсь выбрать все задачи со всеми экземплярами и их транспортным средством. Однако это очень медленный запрос.

Насколько я понимаю, я должен использовать prefetch_related, потому что это одномерные отношения.

В моей модели экземпляра есть обратный внешний ключ для задачи:

task = models.ForeignKey(TaskModel, on_delete=models.CASCADE, related_name="instances")

Я попытался выполнить подобный запрос в DjangoORM:

 TaskModel.objects.filter(department_id=department_id).prefetch_related("instances", "instances__vehicle")  

Но это очень медленно. Есть ли какой-либо способ оптимизировать это или из-за того, что отношения по своей сути ограничивают этот шаблон запроса?

Работает в Django 3.x

Комментарии:

1. Сколько результатов вы получаете?

2. существует примерно ~30 тыс. задач и ~60 тыс. экземпляров

3. Извлечение такого объема данных всегда будет медленным. Что вы делаете с данными после их получения?

4. Не могли бы вы показать нам результат, который можно ОБЪЯСНИТЬ(ПРОАНАЛИЗИРОВАТЬ, ПОДРОБНО, БУФЕРЫ) для этого запроса и самого SQL? А какие показатели у вас есть? Не могли бы вы показать DDL?

5. @FrankHeikens извините, что означает DDL?