【发布时间】:2018-11-07 06:02:46
【问题描述】:
我有一个运行良好的 Django 查询,但我的执行速度比在终端中进行相同的查询要慢。出于好奇,我在终端中运行了 django 查询(我从 Django Debug Tooltbar 中读取了它),我得到了同样的慢查询。我试图找出可能是什么问题,我怀疑是::timestamp 转换。
我尝试在下面提出我的问题:
我的 django 查询:
query=Table.filter(time_stamp__range=('2017-05-28 01:00:00', '2017-05-28 07:00:00')).values('time_stamp', 'value')
根据 Django 调试工具栏,这等于这个原始 sql 语句:
SELECT * FROM "table" WHERE "table"."time_stamp" BETWEEN '2018-05-28T01:00:00.004325'::timestamp AND '2018-05-28T07:00:00.004325'::timestamp
根据调试工具栏的结果,我得到了 1436,11 毫秒 的运行时间。
之后我通过终端登录到我的 PostgreSQl 数据库并使用了这个查询:
select * from table where time_stamp between '2018-05-28 01:00:00' and '2018-05-28 07:00:00';
这里我得到了 753.086 毫秒 的执行时间。
我的模型样本:
class Table(models.Model):
time_stamp = models.DateTimeField()
value = models.FloatField(blank=True, null=True)
在我看来,这两个查询是相同的,除了 Django 查询中的时间戳 (::timestamp) 对话。
如何避免我认为导致查询缓慢的 Django 查询中的时间戳对话?提前感谢您的帮助!
【问题讨论】:
标签: python django postgresql django-queryset django-orm