Главная · Каталог задач · ORM: запросы, связи, лишние обращения

Готовый сценарий

ORM: запросы, связи, лишние обращения

Проблема N+1 возникает, когда чтение связи повторяется для каждого объекта списка. ORM скрывает SQL, поэтому короткий цикл может создавать десятки обращений к базе. Енотик поможет сопоставить модели, запрос и обращение к связанным полям. Учебная задача: показать 20 книг с авторами так, чтобы число SQL-запросов не росло по одному на книгу. Способ предзагрузки зависит от типа связи и используемой ORM.

Попробуйте прямо здесь Отвечает Gemma 3 12B — модель подобрал сервис

Открыть в полном чате

  • Доступ без VPN
  • Русский интерфейс
  • Оплата рублями по факту

Зачем

Зачем это нужно

01

Покажите тип связи и место, где шаблон или сериализатор читает её.

02

Сравните число SQL-запросов на малом и увеличенном наборе объектов.

03

Проверьте порядок, отсутствующие связи и объём загруженных данных после правки.

Вопросы

Частые вопросы

Как выглядит предметный запрос про N+1?

«В учебном списке 20 книг, у каждой один автор; сериализатор читает его имя. В логе одна выборка книг и двадцать обращений за авторами. Предложи вариант для указанной версии Django и тест роста списка до 40». Приложите модель и сериализатор: без них нельзя выбрать способ загрузки только по названию поля author.

Соединение всегда лучше отдельной предзагрузки?

Нет, решение зависит от связи и формы результата. Для нескольких коллекций соединение может размножить строки, а предзагрузка отдельными запросами — сохранить удобную структуру объектов. Попросите оценить не только количество обращений, но и переданные строки, память и пагинацию. Один огромный запрос не обязательно дешевле нескольких ограниченных запросов с понятным набором полей для конкретного экрана.

Как убедиться, что исправление не меняет данные?

Сравните идентификаторы объектов, сортировку и связанные значения до и после правки. Добавьте книгу без необязательной связи и автора с несколькими книгами. Проверьте количество запросов при сериализации, а не только при построении queryset: ленивая загрузка может произойти позже. Измерения проводите на одинаковых данных и учитывайте прогретые кэши, которые способны скрыть лишние обращения к базе.

Что модель может узнать без доступа к базе?

Она может разобрать предоставленный код и объяснить вероятную форму SQL, но фактический запрос лучше взять из вашего лога. Укажите ORM, драйвер и версии: имена методов и поведение загрузки различаются. Не передавайте строки с реальными персональными значениями. Если план выполнения отсутствует, рекомендации об индексе остаются предположением до проверки на вашей схеме и данных.

Рядом

Дальше — весь каталог задач: поиск по названию, темы и фильтры.

Нужно больше

Весь Енотик — в одном окне

Полный чат: история, вложения, базы знаний, картинки и видео. Один баланс на все модели, оплата рублями по факту.