我有以下型号:
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-700ms才能运行。有没有办法让这更快?我想做的是在数据库中获取12部最受欢迎的电影。
答案 0 :(得分:1)
这不是你可以在Django中做的事情。优化这种方法的方法是在数据库中。
针对此生成的实际查询运行EXPLAIN
- 实际上,Django调试工具栏可以为您执行此操作 - 并注意相关子查询和JOIN是否正在使用索引,而不是全表扫描。您可能需要在item, today
上为Paginator表创建索引。