Я немного озадачен тем, что лучше использовать в следующем случае: у меня довольно сложный запрос, который используется для составления отчетов.Упрощенная версия выглядит как
SELECT [type], COUNT(*) as total_num, COUNT(DISTINCT user_id) as uq_user_num
FROM table1
INNER JOIN table2 ON (...)
...
WHERE table3.last_action_date BETWEEN :start_date AND :end_date
GROUP BY [type]
Я могу создать встроенную функцию или хранимую процедуру, которая принимает start_date и end_parameters и выполняет этот запрос.
Я склоняюсь к функции, потому что эта задача не связана с изменением данныхили сложная логика.Кроме того, я могу захотеть использовать результат в APPLY
позже (на данный момент это не очень важно).
Имеет ли смысл использовать функцию, а не процедуру?Есть ли разница с точки зрения производительности (кэширование плана выполнения и т. Д.)?
Спасибо.