Bire - kadar çok ilişkisi olan iki model var: A -> {B}. Bir filtre() kullandıktan sonra A ile kaç tane A kaydettiğimi sayıyorum. Ardından, A'nın en üstteki X kayıtlarını onlara bağlı olan en fazla B kaydıyla çıkarmam gerekiyor.Django: Hizalama için alternatif (nokta())
geçerli kod:
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];
Ben ~ 300k oda kayıtları var ve benim laptop ile bu bir sorgu için ~ 2s alıyor. Sorguyu parçalara ayırdım ve zamanladım ve ana darboğaz annotate().
Django ile bunu daha hızlı yapmak için herhangi bir yolu var mı?
Ben değerlere önce() çağrısı (sonra imkansız), zaman yaklaşık olarak aynı kaldığını yaparsanız. Yoksa bunu filtre() 'den önce yapmam gerekiyor mu, daha sonra bir grup çağrı daha hızlı olacak? – user1581390
'print (data.sql)' ile SQL'e bakmayı denediniz mi? – onlythefinestwilldo