Код Middle Django ORM и N+1 обновлено
Посчитать SQL-запросы при ленивой загрузке
Условие
Смоделируйте, сколько SQL-запросов сделает код. Есть n заказов, у каждого k позиций; в цикле по заказам код обращается к order.customer и к каждой позиции item.product. Стратегия загрузки задана набором opts из строк "select_customer" (select_related клиента), "prefetch_items" (prefetch_related позиций), "prefetch_items_product" (Prefetch позиций с select_related товара). Без prefetch позиции загружаются отдельным запросом на каждый заказ, а товар каждой позиции отдельным запросом, если он не подтянут. Верните общее число запросов. При n = 0 выполняется только основной запрос.
Примеры
count_queries(10, 3, []) // 51
count_queries(10, 3, ["select_customer"]) // 41
count_queries(10, 3, ["select_customer", "prefetch_items"]) // 32
Как подойти
Подсказки: 1
- Посчитайте отдельно: основной, клиенты, позиции, товары.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.