django - 在 django ORM 中以这种方式访问对象时会有任何性能改进吗?
问题描述
我有两个模型,其中包含从一个到另一个的 ForeignKey。
class M1(models.Model):
name = models.TextField()
class M2(models.Model):
name = models.TextField()
parent = models.ForeignKey(M1, related_name='children')
我正在重构代码以提高性能。
这 2 个 ORM 查询之间是否会有任何性能差异。
m1 = M1.objects.get(id=1)
children = m1.children.all()
和
children = M2.objects.filter(parent_id=1)
解决方案
这 2 个 ORM 查询之间会有任何性能差异吗?
是的。在前者中,您进行查询以获取M1
对象,然后QuerySet
为第二个构造 a。如果您稍后“使用” QuerySet
,那么它将进行两个查询。
在后者中,您只构建一个查询集,因此如果您使用该查询集,则只进行一个查询。
如果您因此对该对象不感兴趣,则M1
使用后者会更好。
推荐阅读
- keras - 实际上从张量对象打印值
- graphql - graphql .NET 核心解决方案 - 无法包含相关对象
- c# - 同一 DBContext 的多个实例
- android - 当孩子是当前日期和当前时间生成的随机密钥时,如何从新活动更新firebase数据节点
- c# - 发布后 C# 程序未运行(.dll 问题?)
- c# - 集合比较失败时在测试输出中打印任意属性值
- javascript - Javascript - 检测用户何时切换到另一个应用程序
- css - 如何在 Edge 中检测对空间均匀的部分支持
- javascript - 问题执行拖放javascript“提供的浮点值是非有限的” - BPMN
- ios - Xamarin 表单 - iOS 收件箱文件夹