У меня есть следующий оператор, который предварительно выбирает объекты двоюродного брата, связанные с каждым пользователем, а затем разбивает на части набор запросов, чтобы получить последние 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 пользователей или более.
И в качестве последующего шага: когда это хорошая идея для предварительной выборки?