SQL Ready | Базы Данных
Фотография
нажмите — покажем
нажмите — покажем
Настройте оценку пользовательских функций!
Для пользовательской функции PostgreSQL позволяет явно указать стоимость вызова через COST, а для функции, возвращающей набор строк, — ожидаемое число строк через ROWS.
Причём пересоздавать функцию не обязательно:
ALTER FUNCTION find_orders(bigint)
ROWS 5;
ALTER FUNCTION expensive_check(jsonb)
COST 500;
Чем выше COST, тем дороже планировщик считает вычисление и тем сильнее старается не выполнять его лишний раз.
PostgreSQL прямо предоставляет COST и ROWS как информацию для оптимизации пользовательских функций.
EXPLAIN (ANALYZE, BUFFERS)
SELECT u.id, o.*
FROM users u
CROSS JOIN LATERAL find_orders(u.id) o;
🔥 Если пользовательская функция ломает оценки строк или вызывается слишком часто, проверьте COST и ROWS — иногда правильный план получается без переписывания запроса и новых индексов.
➡️ SQL Ready | #совет
16 · 1.2K ·