【发布时间】:2020-04-22 21:29:32
【问题描述】:
class A(models.Model)
results = models.TextField()
class B(models.Model)
name = models.CharField(max_length=20)
res = models.ManyToManyField(A)
- 假设我们有以上 2 个模型。
A模型拥有数百万个对象。
我想知道获取特定B 对象的所有results objects 的最有效/最快的方法是什么。
- 假设我们必须检索对象编号为
5的B的所有结果
Option 1 : A.objects.filter(b__id=5)
(OR)
Option 2 : B.objects.get(id=5).res.all()
- 选项 1:我的问题是在
A模型对象上按 id 过滤会花费很多时间吗?因为有数百万个A模型对象。 - 选项 2:问题:
B模型上的res字段是否存储了A模型对象的id值?
我假设选项2 的原因会是一种更快的方法,因为它存储A 模型对象的引用并首先直接获取这些对象值并进行第二个查询以获取结果。而在第一个选项中,按 id 或任何其他字段过滤会占用大量时间
【问题讨论】:
-
第一个只会查询一次,而后者会查询两次。
标签: django django-models django-rest-framework django-forms django-templates