加快Django查询速度

时间:2018-05-28 12:59:38

标签: django django-queryset django-orm sqlperformance

我正在使用Django创建一个显示多种数据的仪表板。我的问题是尽管我一直打到数据库(PostgreSql),页面加载缓慢。这些表每10分钟加载一次数据,因此目前包含数百万条记录。我的问题是当我用Django ORM进行查询时,我慢慢得到数据(根据Django工具栏,它是1,4秒)。我知道这不是太多b是总加载时间的一半(3,1),所以如果我可以减少查询的时间,页面加载可以减少到那里,用户体验可能会更好。当查询运行时,我获取~2800行。有没有办法加快这个查询?我不知道我做错了什么,或者这个数据量的这个时间是正常的。我附上了我的查询和模型。提前感谢您的帮助。

我的查询(这里我提取6小时的时间间隔。):

  my_query=MyTable.filter(time_stamp__range=(before_now,  now)).values('time_stamp',  'value1', 'value2')

我尝试使用。iterator(),但查询速度并不快。

我的模特:

class MyTable(models.Model):
        time_stamp = models.DateTimeField()
        value1 = models.FloatField(blank=True, null=True)
        values2 = models.FloatField(blank=True, null=True)

1 个答案:

答案 0 :(得分:2)

添加index

  function findLatLonFromIP(apiKey) {
    return new Promise((resolve, reject) => {
      $.ajax({
        url: `https://www.googleapis.com/geolocation/v1/geolocate?key=${apiKey}`,
        type: 'POST',
        data: JSON.stringify({considerIp: true}),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: (data) => {
          if (data && data.location) {
            resolve({lat: data.location.lat, lng: data.location.lng});
          } else {
            reject('No location object in geolocate API response.');
          }
        },
        error: (err) => {
          reject(err);
        },
      });
    });
  }

不要忘记在此之后运行class MyTable(models.Model): time_stamp = models.DateTimeField() value1 = models.FloatField(blank=True, null=True) values2 = models.FloatField(blank=True, null=True) class Meta: indexes = [ models.Index(fields=['time_stamp']), ] manage.py makemigrations