use*_*390 6 django django-models
有两种模型具有一对多的关系,A - > {B}.我在计算使用过滤器()之后有多少AI记录与同一个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];
Run Code Online (Sandbox Code Playgroud)
我有~300k B记录和我的笔记本电脑,这是一个查询需要~2s.我将查询分解为部分并计时,似乎主要的瓶颈是annotate().
有没有办法用Django更快地做到这一点?
小智 0
您应该在查询集中添加.select_related('a')之前。annotate这将迫使 django 在计算模型之前加入模型。
https://docs.djangoproject.com/en/1.9/ref/models/querysets/#select-相关
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |