Разница во времени выполнения между запросом Django и необработанным SQL-запросом в терминале - PullRequest
0 голосов
/ 28 мая 2018

У меня есть запрос 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, который, как мне кажется, вызвал медленный запрос?Спасибо заранее за вашу помощь!

1 Ответ

0 голосов
/ 28 мая 2018

Существуют накладные расходы, связанные с использованием ORM в django, который преобразует записи в объекты.Он будет (почти?) Всегда медленнее, чем необработанный SQL.

Если вам нужны только данные, а не экземпляр вашей Table модели, вы можете напрямую запросить базу данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...