Spoiler: a query ficou 23x mais rápida com CTE's apenas transformando o problema quadrático em linear. Sem índices.
Um dos cenários mais comuns de...
For further actions, you may consider blocking this person and/or reporting abuse
Otimo post Leandro, eu uso bastante CTEs principalmente para gerar dados direito do banco transacional.
Uma outra alternativa, ou complemento, que talvez até melhore os 300ms, é usar views materializadas, quando os dados não precisam ser realtime, as views materializadas são uma mão na roda, precisa só tomar o cuidado de agendar corretamente a refresh dela.
Eu combino bastante CTEs com views materializadas, a grande vantagem dela é que a aplicação entendem ela como uma tabela, isso faz com que você consiga usar ela com qualquer ORM disponivel sem dor de cabeça.
valeu Duke! parece uma ótima combinação mesmo, views materializadas com CTE's!
Muito interessante o artigo, não conhecia essa aproximação para criação de tabelas temporárias.
Parabéns!
ótimo artigo, parabéns!!
Finalmente vejo uma explicação clara do uso da cláusula WITH. Obrigado!