Сталкивался ли с оптимизацией в Django ORM

Python Junior Без компании
Сталкивался ли с оптимизацией в Django ORM
Ответы
Да, сталкивался. Основные подходы к оптимизации Django ORM: - **select_related()** - для ForeignKey и OneToOneField (JOIN в SQL): ``` books = Book.objects.select_related('author').all() # 1 запрос вместо N+1 ``` - **prefetch_related()** - для ManyToManyField и обратных связей: ``` authors = Author.objects.prefetch_related('books').all() ``` - **only()/defer()** - загрузка только нужных полей: ``` users = User.objects.only('username', 'email') ``` - **count() vs exists()**: ``` if Book.objects.filter(author=author).exists(): # Лучше чем count() > 0 ``` - **bulk_create/update** для массовых операций: ``` Book.objects.bulk_create([Book(...), Book(...)]) ``` - **Индексы** в моделях: ``` class Meta: indexes = [models.Index(fields=['title'])] ``` - **connection.queries** для дебага: ``` from django.db import connection print(connection.queries) ``` Важно анализировать конкретные запросы через django-debug-toolbar или EXPLAIN.