Задать вопрос
@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 сек. Как такое может быть? да в функции делаются еще определенные действия, но они выполняются за доли секунд
  • Вопрос задан
  • 231 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    PostgreSQL. Advanced
    4 месяца
    Далее
  • Учебный центр IBS
    QPT PostgreSQL 16. Оптимизация запросов
    1 неделя
    Далее
  • Слёрм
    PostgreSQL База
    4 недели
    Далее
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
DBA для вашего PostgreSQL?
Зачем здесь query execute? Запрос же статичен.
RETURN QUERY SELECT "id", "name" FROM "mytable" WHERE date BETWEEN t1 AND t2;

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

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

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

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