在Django中更快速地访问最旧的数据库记录的方法?

1 投票
3 回答
1016 浏览
提问于 2025-04-17 05:45

我有一个批处理任务,需要按记录的时间顺序处理数据,最老的记录先处理。在django中,我定义了一个模型,类似于下面这样:

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

我需要通过一个叫做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

3 个回答

0

我觉得你得先弄清楚它是不是效率低下。如果是的话,你可以考虑缓存一下(把数据存到数据库里,或者用像memcache这样的工具)。

2

如果你经常根据 last_processed 这个字段来搜索数据,可能值得给它 建立索引

否则,你现在的做法看起来没问题。

3

你有没有在'last_processed'这个字段上建立索引?如果有的话,不管表的大小如何,这个查询都会很高效。

撰写回答