Что такое проблема N+1 в ORM

Python Middle Без компании
Что такое проблема N+1 в ORM
Ответы
Проблема N+1 возникает, когда ORM делает множество запросов к БД вместо одного оптимального. Например, при загрузке связанных данных сначала выполняется 1 запрос для основной сущности, а затем N запросов для каждой связанной записи. ``` # Проблемный пример (Django ORM) books = Book.objects.all() # 1 запрос for book in books: print(book.author.name) # N запросов (по одному на каждую книгу) ``` Решение - использовать `select_related` (для ForeignKey) или `prefetch_related` (для ManyToMany): ``` # Оптимальное решение books = Book.objects.select_related('author').all() # 1 запрос с JOIN for book in books: print(book.author.name) # Данные уже загружены ``` Проблема характерна для всех ORM (SQLAlchemy, Django ORM и др.) и приводит к значительному падению производительности при работе с большими наборами данных.