2011-11-06 65 views
1

我有一个按最旧记录顺序处理记录的批处理作业。在Django,我已经定义了一个类似的模式:访问Django中最旧的数据库记录的更快方法?

class mymodel(models.Model): 
    name = models.CharField() 
    ... 
    last_processed = models.DateTimeField(blank=True, editable=False, null=True) 

我需要得到由DateTimeField字段最早的记录last_processed。我明白这样做的Django的方法是:

mymodel.objects.order_by('last_processed')[:1].get() 

然而,有没有执行该查询更快和更有效的方式?

我期待数据库的增长,所以它可能有多达1000万条记录。持续运行的查询似乎并不十分有效....

系统规格:

  • 的CentOS 6.0
  • 的Python 2.6.5
  • 的Django 1.3
  • 的PostgreSQL 8.4.7
+0

我通常会写'MyModel.objects.order_by('last_processed')[0]',而不是切片然后调用'得到()'。这只是一个风格问题,但底层SQL对于这两个查询都是相同的。 – Alasdair

回答

2

如果您经常根据last_processed字段进行搜索,则可能值得indexing it

否则你在做什么看起来很好

3

你有'last_processed'索引?如果是这样的话,无论表的大小如何,查询都是有效的。

0

我认为你必须弄清楚它是否低效。如果是这样,你可以缓存它(存储在数据库中,或使用类似memcache)

相关问题