У меня есть запрос Django, который работает хорошо, но я выполняю его медленнее, чем этот же запрос в терминале.Из любопытства я запустил запрос django (я прочитал его с панели инструментов отладки Django) в терминале, и я получил такой же медленный запрос.Я попытался выяснить, в чем может быть проблема, и я подозреваю, что преобразование ::timestamp
.
Я пытаюсь представить мою проблему ниже:
Мой запрос django:
query=Table.filter(time_stamp__range=('2017-05-28 01:00:00', '2017-05-28 07:00:00')).values('time_stamp', 'value')
Что эквивалентно этому необработанному sql-утверждению в соответствии с Django Debug Toolbar:
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)
На мой взгляд, два запроса совпадают, за исключением диалога с отметкой времени (::timestamp
) в запросе Django.
Как можно избежать разговора о метках времени в моем запросе Django, который, как мне кажется, вызвал медленный запрос?Спасибо заранее за вашу помощь!