Django 视图中的大量查询

Posted

技术标签:

【中文标题】Django 视图中的大量查询【英文标题】:Large number of queries in Django views 【发布时间】:2016-10-27 05:53:09 【问题描述】:

我创建了一个 Django 应用程序,一切似乎都运行良好。然后我开始查看 Django 调试工具栏,发现我的一些页面生成了 100 多个查询,其中有很多重复项。但是,页面仍然很流畅,并且执行时间仍然很短,因为我可以想象缓存。

我的问题是,这些大量的查询是一个大问题吗?我是否应该优先考虑减少查询的数量,或者如果我知道 Django ORM 将缓存结果,两次调用相同的查询是否可以。

例如,如果我在模板中多次执行相同的查询,我应该将其作为上下文变量传递还是使用 with 标签将其设置为等于模板中的变量,而不是多次调用它,即使 Django 缓存了结果?

【问题讨论】:

太宽泛了,但我感觉您误解了 ORM 缓存的工作原理。为什么不发布一些代码? 您应该查看查询需要多长时间而不是查询的数量 是的,代码和查询执行被缓存,因此看起来更快。虽然,您需要共享一些代码,因为每个请求 100 个查询似乎有点太高了。 基本上我要问的是是否有 500 个查询是否重要,但它在 100 毫秒内执行?我会更新一个例子 还是太宽泛了,你是通过查询次数还是其他方式来为你的数据库付费?与谁有关?为了什么? 100 个查询不一定太高,具体取决于页面在做什么 【参考方案1】:

查询的数量无关紧要,您需要关注的是他们获取的数据和他们花费的时间。

如果有任何事情花费最少的时间查看完成时间最长的查询,因为这些查询将返回最多的数据,并查看您是否真的需要所有这些数据。如果这样做,是否有其他方法可以访问它。如果不这样做,您可以减少返回的数据。

与往常一样,如果性能不是问题,则无需担心,专注于其他可能成为瓶颈的事情。

【讨论】:

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

将视图中的 Django 查询集传递给模板

Django REST framework视图

将 Django 中的视图/模型链接到 Javascript 前端框架

在 Django 中为多个查询编写视图的最佳方法?

Django在视图中从db查询初始表单值。

Django - 为啥视图中的“默认值”不起作用?