0

我有以下型号:

class Movie(models.Model):
    item = models.OneToOneField(Item, primary_key=True)

class Item(models.Model):
    ...

class Popularity(models.Model):
    item = models.OneToOneField(Item, primary_key=True)
    today = models.IntegerField(default=0, db_index=True)

我想执行以下查询:

movies = Movie.objects.order_by('-item__popularity__today') \
                      .values(...)
paginator = Paginator(movies, 12)

但是,数据库中有大约 52,000 行,这需要 500-700 毫秒才能运行。有什么办法可以让这更快吗?我要做的是获取数据库中最受欢迎的 12 部电影。

4

1 回答 1

1

这不是你可以在 Django 中做的事情。优化它的方法是在数据库中。

针对生成的实际查询运行EXPLAIN- 事实上,Django 调试工具栏可以为您执行此操作 - 并注意相关的子查询和 JOIN 是否使用索引,而不是全表扫描。您可能需要在item, today开始时为 Paginator 表创建一个索引。

于 2012-05-30T19:46:03.130 回答