Как читать "объяснения" PSQL для улучшения запросов в Django

У меня есть запрос в Django, который в итоге извлекает около 3000 строк, которые присоединяются к другой таблице. Я рефакторизовал как можно больше запросов, чтобы уменьшить количество объединений, но я пытаюсь получить дополнительную производительность от индексирования. Мои первые (неуклюжие) попытки немного улучшили ситуацию, но я упираюсь в пределы своих знаний по управлению базами данных. Что вы думаете об улучшении производительности?

Вот объяснение:

Вот queryset (который также содержит составной фильтр объектов Q, который преобразуется в вышеуказанный:

all_deliverables_queryset = Deliverable.objects.filter(
        Q(q_objects & Q(node__code_path__istartswith=target_root_path))
    ).select_related("node", "kind", "language")

Вот текущие индексы, которые явно много "угадывают и проверяют" lol.

class Meta(ExModel.Meta):
        db_table = "assets_deliverables"
        indexes = [
            models.Index(fields=["language"]),
            models.Index(fields=["node"]),
            models.Index(fields=["kind"]),
            models.Index(fields=["kind", "node", "language"]),
            # models.Index(fields=["kind_id", "node__kind_id", "language_id"]),
            models.Index(fields=["node", "language"]),
            models.Index(fields=['id']),
        ]
        ordering = ("id",)
        permissions = [
            (
                "receives_email_on_poster_s3_fail",
                "Receives failure alert emails when the poster sync fails.",
            ),
        ]
Вернуться на верх