SQL Server: Tabelas Temporárias Locais, Globais e Tabelas Variávies 🗄️

No SQL Server, existem três tipos principais de tabelas temporárias, cada uma com características distintas que impactam o desempenho, o uso de memória e o espaço em disco. Escolher a opção correta é essencial para evitar sobrecarga no tempdb e garantir eficiência na alocação de recursos.


 

🔹 Tabelas Temporárias Locais (#temp)

Escopo: Acessível apenas dentro da sessão em que foi criada e removida automaticamente quando a sessão é encerrada.

Desempenho: Possui menor sobrecarga do que as tabelas globais, mas pode impactar o tempdb se usada em grandes volumes de dados.

💾 Uso de Disco: Armazenada no tempdb, podendo consumir espaço significativo dependendo do volume de dados.

⚠️ Cuidados: O uso excessivo pode aumentar a concorrência no tempdb, impactando outras operações do SQL Server.


 

🌐 Tabelas Temporárias Globais (##temp)

Escopo: Disponível para todas as sessões no servidor, removida apenas quando a última sessão que a utiliza é encerrada.

Desempenho: Maior sobrecarga devido ao escopo global e concorrência entre sessões.

💾 Uso de Disco: Armazenada no tempdb, consumindo ainda mais espaço do que as tabelas locais, pois pode ser acessada por várias sessões simultaneamente.

⚠️ Cuidados: Se não for removida corretamente, pode continuar ocupando espaço no tempdb mesmo após algumas sessões serem encerradas.


 

🏗️ Variáveis de Tabela (@temp)

Escopo: Restrito ao bloco de código onde foi declarada, como dentro de um procedimento armazenado ou função.

Desempenho: Menor sobrecarga, pois geralmente é mantida em memória ao invés de utilizar o tempdb.

💾 Uso de Disco: Consumo mínimo de espaço, mas pode ser gravada no tempdb caso os dados excedam a capacidade da memória disponível.

⚠️ Cuidados: Para grandes volumes de dados, pode impactar a memória do servidor, causando troca para o tempdb e degradando o desempenho.


 

🔎 Qual escolher?

Tipo de Tabela
Melhor Uso
Cuidados
#temp (Local)
Quando a tabela for usada apenas dentro da sessão atual.
Pode impactar o tempdb se for muito grande ou usada em excesso.
##temp (Global)
Quando várias sessões precisam acessar os mesmos dados temporários.
Pode consumir muito espaço no tempdb e causar concorrência entre sessões.
@temp (Variável de Tabela)
Quando os dados são pequenos e usados apenas dentro de um procedimento ou função.
Grandes volumes podem sobrecarregar a memória e forçar escrita no tempdb.

 

🛠️ Boas práticas

🔹 Gerencie o tempdb: Evite sobrecarregar o tempdb, especialmente ao criar tabelas temporárias em loops ou consultas frequentes.

🔹 Limpeza manual: Sempre que possível, remova tabelas temporárias explicitamente (DROP TABLE #temp) para liberar espaço.

🔹 Monitore o uso de memória: Se a variável de tabela crescer muito, pode ser mais eficiente usar uma tabela temporária.

🔹 Prefira variáveis de tabela para pequenas cargas: Para grandes volumes, tabelas temporárias são mais eficientes do que variáveis de tabela.

🔹 Evite tabelas globais quando possível: A menos que seja estritamente necessário, prefira tabelas locais para reduzir concorrência.

 

Com essas recomendações, você pode escolher a melhor abordagem para suas tabelas temporárias e otimizar o desempenho do SQL Server. 🚀

Data de Publicação: 26-10-2023

Categoria: SQL Server