Eu tenho uma consulta que usa uma subconsulta ( select min/max(date) from stage.stage_net_subscription_010_filter_and_net_pds
) para encontrar datas mínimas e máximas de uma tabela.
Parece que as subconsultas são repetidas com muita frequência.
- Existe uma maneira de reescrever a consulta sem CTEs , de modo que as subconsultas não sejam executadas para cada loop
- Uma outra opção para agilizar a consulta é ver, seria usar gerar série ao invés de selecionar as datas de uma tabela com datas. Alguma pista se isso vai fazer a diferença?
Consulta:
SELECT
dim_date.date AS date
, stage_net_subscription_020_classes.client_id AS client_id
, stage_net_subscription_020_classes.product_id AS product_id
FROM star.dim_date dim_date
CROSS JOIN stage.stage_net_subscription_020_classes stage_net_subscription_020_classes
where date >= (select min(date) from stage.stage_net_subscription_010_filter_and_net_pds)
and date <= (select max(date) from stage.stage_net_subscription_010_filter_and_net_pds);
Você pode usar uma junção cruzada lateral, embora eu não entenda por que você deseja evitar um CTE: