Извлечение N родительских строк с помощью одного запроса, а затем выполнение одного дополнительного запроса для каждой строки для получения связанных данных (еще N запросов) вместо одного соединения или пакетной выборки WHERE id IN (...). Это наиболее распространенная ошибка производительности ORM, особенно из-за ленивой загрузки ассоциаций.
Пример
EXPLAIN ANALYZE
SELECT*FROM orders WHERE customer_id =42;
-- QUERY PLAN-- Index Scan using idx_orders_customer_id on orders-- (cost=0.29..8.31 rows=1 width=48) (actual time=0.02..0.03 rows=3 loops=1)-- Index Cond: (customer_id = 42)
Итог
Извлечение N родительских строк с помощью одного запроса, а затем выполнение одного дополнительного запроса для каждой строки для получения связанных данных (еще N запросов) вместо одного соединения или пакетной выборки WHERE id IN (...).
В чем проблема запроса N+1 и откуда она обычно возникает? · Sobeso