Как читать "объяснения" 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.",
),
]