컨텍스트를 제공하기 위해 여러 스테이션에서 많은 온도 측정을 수행했으며 예측 한 내용과 일치하는지 확인하려고합니다. 내 모델은 다음과 같습니다Django : 대형 테이블에서이 쿼리를 최적화하는 방법
각각의 온도 측정을 위해class Station(models.Model):
station_id = models.CharField(max_length = 18 ,primary_key = True)
sector = models.CharField(max_length = 40)
class Weather(models.Model):
station = models.ForeignKey(Station)
temperature = models.FloatField()
date = models.DateField()
class Forecast(models.Model):
station = models.ForeignKey(Station)
date = models.DateField()
score = models.IntegerField()
이 시간 프레임에서 다른 온도 측정이되는,이 없다면, 나는, 최근 7 일 동안 역의 예측 점수의 평균을 알고 싶습니다 시작점입니다. 다음 코드는 내가 원하는 것은 수행하지만 실행하기에는 너무 느립니다 (~ 10 분!) :
observations = Weather.objects.all().order_by('station','date')
for obs in observations:
try :
if obs.station == previous.station:
date_inf = min(obs.date- timedelta(days=7), previous.date)
else :
date_inf = obs.date- timedelta(days=7)
except UnboundLocalError :
date_inf = obs.date- timedelta(days=7)
forecast = Forecast.objects.filter(
station=obs.station
).filter(
date__gte = date_inf
).filter(
date__lte = obs.date - timedelta(days=1)
).aggregate(average_score=Avg('score'))
if forecast["average_score"] is not None:
print(forecast["average_score"],obs.rating)
# Some more code....
previous = obs
어떻게 실행 시간을 최적화 할 수 있습니까? 단일 쿼리로이 작업을 수행 할 수 있습니까?
감사합니다.