annotate() 使事情变得缓慢爬行是否正常?

像这样使用注释:

post_list = j.post_set.all().annotate(num_comments=Count('comment')).order_by('-pub_date')

使它在不做注释的情况下花费四倍的时间:
post_list = j.post_set.all().order_by('-pub_date')

我还尝试了 values() 和 defer() ,但这些也没有帮助。将评论数量保留为 Post 表中的一个字段是唯一真正的选择吗?

顺便说一下,我正在使用 MySQL。

最佳答案

查看为什么查询可能运行缓慢的一种方法是实际查看生成的 SQL。

最简单的方法是在 django shell 中执行:

>>> j.post_set.all().annotate(num_comments=Count('comment')).order_by('-pub_date')
>>> print j.query

您可能会发现重新排序您的链式查询集方法可能会改变性能:
>>> j.post_set.order_by('-pub_date').annotate(num_comments=Count('comment'))

关于python - Django annotate() 性能 - 它应该是超慢的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17517758/

10-13 02:53