2016-07-01 1 views
3

私は、djangoがすべての外部キーに対して自動的にdb_indexを作成することを読んだことがあります。ただし、db_indexは逆引き参照のパフォーマンスも向上させますか?外部キー逆引きのためのdjango db_index

たとえば、BにAへの外部キーがあり、私がa.b_set.all()を使用すると、dbインデックスからパフォーマンスが向上するかどうかを確認できますか?

もしそうでなければ、dbインデックスで外部キーの逆引きをより高速に行う方法がありますか?

おかげで、

+1

要するに、yepは仕事です。しかし、パフォーマンス上の問題がある場合は、具体的な問題の詳細を説明したコードを投稿することをお勧めします。 – Todor

+1

外部キーはpkを指しているので、すでに索引付けされています。 ForeignKeyフィールドの 'db_index'は、逆引き参照です。だから、質問に答える:はい。 – C14L

+0

ありがとうございます。私はコードを投稿したいが、具体的なパフォーマンスの問題は解決していないようで、パフォーマンスを向上させるためにモデルを改善する方法を探しているように、私は愚かな逆転よりスピードを落とさないようにしたい簡単な変更だけでより良い結果になった可能性のあるルックアップ。 Todor、C14Lは、ソースで適切な回答をフォーマットするので、答えとして選ぶことができます。 –

答えて

2

はあなたが単純なモデル構造を持っているとしましょう:

class Author(models.Model): 
    name = models.CharField(max_length=70) 
    email = models.EmailField() 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    author = models.ForeignKey(Author) 

あなたはそれを今すぐ問い合わせるForeignKey

だからBook.authorはすでに、インデックスを持って言及したよう:

author_books = Book.objects.filter(author=a) 

または

author_books = a.book_set.all() 

正確に同じクエリを生成するため、book.authorインデックスが両方の状況で使用されます。

関連する問題