Я пытаюсь оптимизировать свои запросы 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 приводит к снижению производительности?