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/