Долгий запрос

=> \timing on
Timing is on.

Обычный оператор:

=> DO $$
BEGIN
  FOR i IN 1..10 LOOP
    EXECUTE 'SELECT avg(amount) FROM ticket_flights';
  END LOOP;
END;
$$ LANGUAGE plpgsql;
DO
Time: 21286,115 ms (00:21,286)

Подготовленный оператор:

=> DO $$
BEGIN
  FOR i IN 1..10 LOOP
    PERFORM avg(amount) FROM ticket_flights;
  END LOOP;
END;
$$ LANGUAGE plpgsql;
DO
Time: 20152,028 ms (00:20,152)

Время изменилось незначительно - большую часть занимает выполнение запроса.

Быстрый запрос

Обычный оператор:

=> DO $$
BEGIN
  FOR i IN 1..100000 LOOP
    EXECUTE 'SELECT * FROM bookings WHERE book_ref = ''0824C5''';
  END LOOP;
END;
$$ LANGUAGE plpgsql;
DO
Time: 4680,450 ms (00:04,680)

Подготовленный оператор:

=> DO $$
BEGIN
  FOR i IN 1..100000 LOOP
    PERFORM * FROM bookings WHERE book_ref = '0824C5';
  END LOOP;
END;
$$ LANGUAGE plpgsql;
DO
Time: 850,609 ms

Время сократилось существенно - разбор и планирование занимает большую часть общего времени.