Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que esse CTE é muito mais lento do que usar tabelas temporárias?


Como você pode ver no plano de consulta, com os CTEs, o mecanismo se reserva o direito de aplicá-los basicamente como uma pesquisa, mesmo quando você deseja uma associação.

Se não tiver certeza, pode executar tudo de forma independente, com antecedência, essencialmente gerando uma tabela temporária... vamos apenas executá-la uma vez para cada linha.

Isso é perfeito para as consultas de recursão que eles podem fazer como mágica.

Mas você está vendo - nos loops aninhados - onde pode dar terrivelmente errado.
Você já está encontrando a resposta por conta própria tentando a tabela temporária real.