Python 更快地访问Django中最早的数据库记录?

Python 更快地访问Django中最早的数据库记录?,python,database,django,Python,Database,Django,我有一个批处理作业,它按最旧记录的顺序处理记录。在django中,我定义了一个类似于以下内容的模型: class mymodel(models.Model): name = models.CharField() ... last_processed = models.DateTimeField(blank=True, editable=False, null=True) 我需要在上次处理的DateTimeField之前获取最旧的记录。我知道django的做法是: mym

我有一个批处理作业,它按最旧记录的顺序处理记录。在django中,我定义了一个类似于以下内容的模型:

class mymodel(models.Model):
    name = models.CharField()
    ...
    last_processed = models.DateTimeField(blank=True, editable=False, null=True)
我需要在上次处理的DateTimeField之前获取最旧的记录。我知道django的做法是:

mymodel.objects.order_by('last_processed')[:1].get()
但是,是否有一种更快、更有效的方法来执行该查询

我预计数据库会增长,因此可能会有多达1000万条记录。持续运行该查询似乎效率不高

系统规格:

  • CentOS 6.0
  • Python 2.6.5
  • Django 1.3
  • PostgreSQL 8.4.7

如果您经常根据上次处理的字段进行搜索,那么它可能是值得的


否则,您所做的看起来很好

如果您经常根据上次处理的字段进行搜索,那么它可能是值得的


否则,您所做的看起来很好

您是否有“上次处理”的索引?如果是这样的话,无论表的大小,查询都将是有效的。

是否有“上次处理”的索引?如果是这样的话,无论表的大小,查询都将是有效的。

我认为您必须找出它是否是低效的。如果是,您可以缓存它(存储在数据库中,或者使用类似memcache的东西)

我认为您必须找出它是否效率低下。如果是,您可以缓存它(将其存储在数据库中,或者使用类似memcache的东西)

我通常会编写
MyModel.objects.order\u by('last\u processed')[0]
,而不是切片然后调用
get()
。不过这只是风格问题,两个查询的底层SQL都是相同的。我通常会编写
MyModel.objects.order\u by('last\u processed')[0]
,而不是先切片然后调用
get()
。不过,这只是风格问题,两个查询的底层SQL是相同的。