gpt4 book ai didi

python - 提高 django 数据库查询的性能

转载 作者:IT王子 更新时间:2023-10-29 06:25:17 27 4
gpt4 key购买 nike

我正在使用 django/apache/sqlite3,我有一个看起来像这样的 django 模型:

class Temp_entry(models.Model):
dateTime = models.IntegerField() #datetime
sensor = models.IntegerField() # id of sensor
temp = models.IntegerField() # temp as temp in Kelvin * 100

我正在尝试将最后 300 个 Temp_entry 项放入图表中。我这样做:

revOutsideTempHistory = Temp_entry.objects.filter(sensor=49).order_by('dateTime').reverse()[:300]

但是,此查询大约需要 1 秒。有没有办法改善这个?我仔细研究了一下,发现 order_by 效率极低,所以我希望有一个可行的替代方案?

我想到了一个替代方案,但无法弄清楚如何实现,即每 20 分钟运行一次查询并将其缓存起来,这也是可以接受的,因为数据可能会稍微陈旧而不会产生不良影响.

最佳答案

如果caching是可以接受的,它总是应该被使用。像这样的东西:

from django.core.cache import cache

cached = cache.get('temp_entries')
if cached:
result = cached
else:
result = Temp_entry.objects.filter(sensor=49).order_by('dateTime').reverse().values_list()[:300]
cache.set('temp_entries', result, 60*20) # 20 min

你也可以设置db_indexes对于适当的列

class Temp_entry(models.Model):
dateTime = models.IntegerField(db_index=True) #datetime
sensor = models.IntegerField(db_index=True) # id of sensor
temp = models.IntegerField() # temp as temp in Kelvin * 100

关于python - 提高 django 数据库查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com