django select_related: cuándo usarlo

Estoy tratando de optimizar mis consultas ORM en django. Yo uso connection.queries para ver las consultas que django genera para mí.

Suponiendo que tengo estos modelos:

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

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

Digamos que cuando genero una página web específica, quiero mostrar todos los libros, con su nombre de autor al lado de cada uno de ellos. Además, muestro por separado a todos los autores.

Entonces debería usar

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

Lo que dará como resultado una consulta JOIN. Incluso si hago una línea antes:

Author.objects.all()

Obviamente en la plantilla escribiré algo como{{book.author.name}}.
Entonces, la pregunta es, cuando accedo a un valor de clave externa (autor), si django ya tiene ese objeto de otra consulta, ¿eso dará como resultado una consulta adicional (para cada libro)? Si no, entonces, en ese caso, ¿el uso de select_related realmente crea una sobrecarga de rendimiento?

Respuestas a la pregunta(3)

Su respuesta a la pregunta