0
私はこの質問をしました。注文は投稿の最後のコメントで記録を投稿します。このクエリは小さなテーブルでうまく動作します。しかし、私は約2Mの行をランダムなデータでデータベースに埋めました。 Explainされたクエリーを、Post表で順次スキャンが実行されることを説明しています。DjangoのORMを使用してサブテーブルに参加するには?
Post.objects.extra(select={'last_update': 'select max(c.create_date) from comment_comment c where c.post_id = post_post.id'}).order_by('-last_update')
私は現在のクエリよりも速い同じクエリを書き換えました。しかし、私はdjangoのormに照会する方法を見つけることができませんでした。どのように私はそれを書き換えることができますか?可能であれば、できるだけ生のクエリを使用しないで記述したいと思います。
よろしくお願いいたします。助けてくれてありがとう。ジャンゴで
posts.objects
.annotate(last_update=Max('comments__create_date'))
.order_by('-last_update')[:50]
、annotateはあなたの友達です:私はあなたのDjangoモデルに関するいくつかの仮定を行う場合
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;