django db_index 用于外键反向查找

Ron*_*ess 7 python django django-models django-filter

我读过 django 会为所有外键自动创建 db_index 。但是,db_index 是否也提高了反向查找的性能?

例如,如果 B 有 A 的外键并且我使用 a.b_set.all(),我是否喜欢 db 索引带来的性能提升?

如果没有,有没有办法使用 db 索引使外键反向查找更快?

谢谢,

Tod*_*dor 7

假设您有一个简单的模型结构:

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)
Run Code Online (Sandbox Code Playgroud)

正如你提到的Book.author已经有索引,因为它是ForeignKey

现在查询:

author_books = Book.objects.filter(author=a)
Run Code Online (Sandbox Code Playgroud)

或者

author_books = a.book_set.all()
Run Code Online (Sandbox Code Playgroud)

产生完全相同的查询,因此book.author索引将在两种情况下使用。