Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Functions ou CTEs

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?

3 respostas

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.

solução!

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.