我正在使用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)
答案 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
。