Выбор ответа Middle EXPLAIN и оптимизация обновлено

Как читать loops во вложенном цикле

Вопрос

Запрос соединяет 4 клиента с их заказами. Сколько раз выполнялся узел Bitmap Heap Scan on orders и сколько строк он вернул суммарно?

Nested Loop  (cost=4.87..336.02 rows=80 width=25) (actual time=0.066..0.424 rows=80 loops=1)
  ->  Index Scan using customers_pkey on customers c  (cost=0.29..8.37 rows=4 width=22) (actual time=0.006..0.007 rows=4 loops=1)
        Index Cond: ((id >= 100) AND (id <= 103))
  ->  Bitmap Heap Scan on orders o  (cost=4.58..81.71 rows=20 width=11) (actual time=0.021..0.099 rows=20 loops=4)
        Recheck Cond: (c.id = customer_id)
        Heap Blocks: exact=80
        ->  Bitmap Index Scan on orders_customer_id_idx  (cost=0.00..4.58 rows=20 width=0) (actual time=0.015..0.015 rows=20 loops=4)
              Index Cond: (customer_id = c.id)
Planning Time: 0.763 ms
Execution Time: 0.479 ms

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 4 раза по 20 строк, всего 80. Nested Loop для каждой строки внешнего узла (4 клиента) запускает внутренний узел заново, поэтому у внутреннего скана loops=4. rows=20 показано на один цикл, итого 4 × 20 = 80, что совпадает с rows=80 у самого Nested Loop.

Варианты ответа

  1. 1 раз, 20 строк на всех клиентов
  2. 4 раза, 20 строк суммарно
  3. 4 раза по 20 строк, всего 80правильный ответ
  4. 80 раз, по одной строке за раз

Разбор

Nested Loop для каждой строки внешнего узла (4 клиента) запускает внутренний узел заново, поэтому у внутреннего скана loops=4. rows=20 показано на один цикл, итого 4 × 20 = 80, что совпадает с rows=80 у самого Nested Loop. Так же читается и время: actual time=...0.099 у внутреннего узла это время одного цикла, общее примерно в 4 раза больше. Nested Loop хорош именно здесь: внешних строк мало, а внутренняя сторона ищется по индексу.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме