【发布时间】:2016-05-11 10:41:58
【问题描述】:
有两个模型具有一对多关系,A->{B}。在使用过滤器()后,我正在计算有多少条 A 的记录与相同的 B 相同。然后我需要根据连接到它们的最多 B 条记录来提取 A 的前 X 条记录。
当前代码:
class A(models.Model):
code = models.IntegerField()
...
class B(models.Model):
a = models.ForeignKey(A)
...
data = B.objects.all().filter(...)
top = data.values('a',...).annotate(n=Count('a')).distinct().order_by('-n')[:X];
我有大约 300k B 记录,使用我的笔记本电脑,一次查询需要大约 2 秒。我将查询分解为多个部分并对其进行计时,似乎主要瓶颈是 annotate()。
有什么方法可以用 Django 更快地做到这一点?
【问题讨论】:
标签: django django-models