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 がフル テーブル スキャンではなくインデックスを使用しているかどうかに注意してください。おそらく、最初に Paginator テーブルのインデックスを作成する必要がありますitem, today

于 2012-05-30T19:46:03.130 に答える