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

Os CTEs usam algum espaço no tempdb?


Vou tentar não copiar/colar o MSDN

Não importa.

Um CTE é independente da execução da consulta:é apenas uma construção de linguagem. Pense nisso como uma tabela ou subconsulta derivada pura.

Isso significa que, exceto para CTEs recursivos (veja mais adiante), todos CTEs podem ser codificados em linha. Se você usar o código CTE uma vez, é para legibilidade . Se você usar o CTE duas vezes ou mais, então é defensivo:você não quer cometer um erro e ter a tabela derivada diferente a cada uso.

Quando um CTE é usado duas vezes ou mais, esse código será executado duas vezes ou mais. Ele não será executado uma vez e armazenado em cache no tempdb.

Resumo:pode ou não, como se o código fosse inline.

Nota:uma CTE recursiva é simplesmente uma tabela derivada dentro de uma tabela derivada dentro de uma tabela derivada dentro de uma tabela derivada dentro de um der... então o mesmo se aplica.

Você pode ver isso em Artigo de Tony Rogerson . O uso de tempdb aconteceria de qualquer maneira se fosse codificado inline. Ele também observa que usar uma tabela temporária pode ser melhor por causa da expansão "macro" que expliquei acima

FYI:o mesmo se aplica às visualizações. Apenas macros.