【问题标题】:Execution time difference between Django query and raw sql query in terminal终端中 Django 查询和原始 sql 查询之间的执行时间差异
【发布时间】: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


    【解决方案1】:

    使用 django 的 ORM 会产生开销,它将记录转换为对象。它会(几乎?)总是比原始 SQL 慢。

    如果您只需要数据而不是Table 模型的实例,您可以query the database directly

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 2016-11-21
      • 1970-01-01
      • 2017-03-13
      • 2017-01-22
      • 2011-08-07
      • 2017-04-08
      • 2014-10-14
      • 2021-12-27
      相关资源
      最近更新 更多