@galithr

Как ускорить RETURN QUERY EXECUTE?

Делаю просто запрос
SELECT "id", "name" FROM "mytable" WHERE date BETWEEN '2017-02-01 00:00:00'  AND '2017-02-22 00:00:00'

запрос отрабатывается за 1,7 секунд (данных много)
помещаю этот же запрос в функцию в которой делаю тот же запрос так:
RETURN QUERY EXECUTE 'SELECT "id", "name" FROM "mytable" WHERE date BETWEEN ' || quote_nullable(t1) || '  AND ' || quote_nullable(t2);

скорость запроса уменьшается вдвое до 3,4 сек. Как такое может быть? да в функции делаются еще определенные действия, но они выполняются за доли секунд
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Зачем здесь query execute? Запрос же статичен.
RETURN QUERY SELECT "id", "name" FROM "mytable" WHERE date BETWEEN t1 AND t2;

Впрочем, планировать 1,7с тут в общем-то нечего, так что это спички.

Вообще, вызов хранимки материализуется. Рабочая гипотеза - на материализации время и тратите. Что дальше происходит с данными? В explain что-нибудь полезное видно? (давненько я хранимки не разбирал, не помню, что туда попадает)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы