2016-07-01 103 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) 

至於你提到Book.author已經有指標,因爲它是一個ForeignKey

現在查詢:

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

author_books = a.book_set.all() 

產生完全相同的查詢,因此在兩種情況下都會使用book.author索引。