优化 Django 查询

Posted

技术标签:

【中文标题】优化 Django 查询【英文标题】:Optimizing Django queries 【发布时间】:2011-10-08 01:18:24 【问题描述】:

我有一个页面,用户可以在其中查看特定产品的 cmets 列表。

在视图中,我得到了列表:

comments = product.comments.all().order_by('-timestamp')

以及模板中的这一段:

1   % if comments %
2       % for comment in comments %
3       <div class="comment">
4           <a href="/user/ product.author /"> comment.author </a>
5           <br> comment.text 
6       </div>
7       % endfor %
8   % endif %

当我转到产品页面时使用 django 调试工具栏,我可以看到 Django 执行了许多查询,列表中有许多 cmets。例如,在一个包含 10 个 cmets 的 cmets 列表的产品页面中,Django 执行大约 15 个查询。如果我提交新评论,查询数会增加到 16 个。

如果我尝试删除 comment.author (第 4 行),如果我提交新的 cmets,查询会减少到固定数量。如何优化?

注意:comment.authordjango.contrib.auth.models.User 的外键

【问题讨论】:

我不确定您是否需要担心这方面的优化,除非您期望每个产品有 100 或 1000 的 cmets。当你做这个查询时,你是否觉得获取那 10 个 cmets 花费的时间太长? 【参考方案1】:

我认为这是 select_related 的情况?

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

【讨论】:

是的,我刚刚找到了。太棒了!

以上是关于优化 Django 查询的主要内容,如果未能解决你的问题,请参考以下文章

从多个模型中获取信息时优化 django 查询

优化 Django 查询

Python Django 数据库查询优化 事务

Django中的查询优化

优化 Django 获取查询

django优化--ORM查询