2

编写一个复杂的 django 应用程序涉及在不同的地方(视图、模板等)使用 ORM 对象。然而,设计 ORM 模型通常是在项目开始时完成的。在那个阶段很难准确预测如何查询数据(主要使用什么 ForeignKeys)。

我们可以在许多阶段优化 ORM 进行的查询数量:

  • select_related() - 在给定的 ORM 调用中
  • prefetch_related() - 在给定的 ORM 调用中
  • 覆盖模型 ModelManager 以预取所有查询的所有相关模型

我通常的优化方法是编写我的整个应用程序,然后使用开发人员工具栏,查看它为给定视图生成了多少查询,然后决定它们来自哪里以及如何避免它们(使用上述选项)。

但是我发现这种方法容易出错(例如,您可能忘记检查所有视图或其他背景 /celery/ 方法)。但是,我发现在编写逻辑时进行低效的优化也非常困难(因为我想专注于逻辑,而不是那时的 ORM 调用)。

所以我的问题是——优化 ORM 查询的最佳实践(最佳时机)是什么?

4

1 回答 1

1

他们说过早的优化是万恶之源。当事情变得缓慢时,您应该开始担心优化(即使我们都知道他们最终会这样做)。
使用 Django Debug Toolbar 手动检查每个视图实际上比自动化测试更容易出错。
第一种方法是通过django-timelog收集一些指标,然后从较慢的视图开始使用 DDT。

于 2012-10-16T14:08:58.353 回答