django select_related - когда его использовать

Я пытаюсь оптимизировать свои запросы ORM в Django. Я использую connection.queries для просмотра запросов, сгенерированных для меня django.

Предполагая, что у меня есть эти модели:

class Book(models.Model):
 name= models.CharField(max_length=50)
 author = models.ForeignKey(Author)

class Author(models.Model):
 name = models.CharField(max_length=50)

Допустим, когда я создаю определенную веб-страницу, я хочу отобразить все книги с указанием имени автора рядом с каждой из них. Также я показываю отдельно всех авторов.

Так что я должен использовать

Book.objects.all().select_related("author")

Что приведет к запросу JOIN. Даже если я сделаю строку раньше:

Author.objects.all()

Очевидно, в шаблоне я напишу что-то вроде{{book.author.name}}.
Таким образом, вопрос в том, когда я получаю доступ к значению внешнего ключа (автор), если у django уже есть этот объект из другого запроса, это все равно приведет к дополнительному запросу (для каждой книги)? Если нет, то в таком случае, действительно ли использование select_related приводит к снижению производительности?

Ответы на вопрос(3)

Ваш ответ на вопрос