Django: Разумно ли выполнять предварительную выборку, когда вам нужна только часть набора запросов? - PullRequest
0 голосов
/ 08 января 2020

У меня есть следующий оператор, который предварительно выбирает объекты двоюродного брата, связанные с каждым пользователем, а затем разбивает на части набор запросов, чтобы получить последние 10 элементов:

subquery = (
    Message.objects.values("conversation_id")
    .annotate(latest=Max("id"))
    .values("latest")
        )
latest_message = Prefetch(
    "messages",
    queryset=Message.objects.filter(pk__in=Subquery(subquery)),
    to_attr="latest_message",
)
Conversation.objects.prefetch_related(latest_message)[:10]

Разумно ли выполнять предварительную выборку в этом случае? Я думаю, что API может делать намного больше вычислений, чем требуется, особенно если у нас 1000 пользователей или более.

И в качестве последующего шага: когда это хорошая идея для предварительной выборки?

...