我有这个查询。订单根据帖子的最后评论发布记录。此查询适用于小表。但是,我在评论表上填充了大约2M行的随机数据数据库。使用explain分析查询并看到在Post表上执行顺序扫描。
select
p.*,
t.last_update
from
post_post p
join
( select c.post_id as pid, max(c.create_date) as last_update from comment_comment c group by pid) t
on p.id = t.pid
order by t.last_update desc
limit 50;
我重写了比当前查询更快的同一查询。但我找不到一种方法来适应django的orm上的查询。我该如何重写呢?如果可能的话,我想尽可能不使用原始查询来编写它。
的问候。谢谢你的帮助。
name.lower() == show:
答案 0 :(得分:0)
如果我对你的Django模型做出一些假设,它将看起来像这样:
posts.objects
.annotate(last_update=Max('comments__create_date'))
.order_by('-last_update')[:50]
在Django中,annotate是你的朋友。