【发布时间】:2018-11-07 02:09:27
【问题描述】:
我正在使用 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)
【问题讨论】:
-
如果您在 CLI postgres 客户端中手动运行相同的查询需要多长时间?如果大部分时间都花在数据库本身上,那么您的问题的答案与 Django 无关。提示:如果
time_stamp具有足够的区分能力(=> 您只有极少部分的mytable记录共享相同的 time_stamp 值)您可能需要对其进行索引。 -
我不确定,用户真正需要所有 2800 字符串可能是您可以查看分页吗?
-
在控制台中我运行了相同的查询,我得到了这个
Execution time: 753.086 ms,我的 Django 调试工具栏显示了这个 1439,04 秒。 -
控制台和 django 应用程序从同一台服务器运行?请从工具栏显示 iscreen。
-
是的,它们正在运行。我编辑了我的问题。
标签: django django-queryset django-orm sqlperformance