As vezes podemos fazer algum cálculo ou precisar buscar o último registro de alguma tabela para utilizar em outra tabela. Acho que mais comum em relatórios. O que é mais performático: utilizar CTE ou criar uma Function e chamá-la na query?
As vezes podemos fazer algum cálculo ou precisar buscar o último registro de alguma tabela para utilizar em outra tabela. Acho que mais comum em relatórios. O que é mais performático: utilizar CTE ou criar uma Function e chamá-la na query?
São propósitos diferentes, Anthue.
Uma CTE é basicamente um pedaço de código que você vai repetir em diversas queries ou que é muito complexo, então isso pode simplificar a query.
Já funções recebem parâmetros, podem executar lógicas complexas e devolver valores.
Mas às vezes posso ter um cálculo efetuado dentro de uma CTE para utiliza-lo na próxima CTE ou no resultado final. Algo como
With exemplo AS (
SELECT
ta.tabela1_id,
ta.resultado
FROM tabela
WHERE ta.tabela_id = 'xx'
)
Select
T.*,
T.coluna1 * E.resultado AS total
FROM tabela1 T
LEFT JOIN exemplo E ON e.tabela1_id = T.id
Então minha dúvida é em relação ao que seria mais performático, usar uma CTE, criar uma função e chama-la nesse SELECT da tabela1 ou até fazer um sub-SELECT. Claro, esse aqui é um exemplo super básico e pensando agora, talvez cada caso seja uma caso.
Como você disse, cada caso é um caso. Nesse seu cenário aí não vejo motivo pra usar uma função não. Nem CTE eu usaria. Eu só faria o JOIN normalmente mesmo.