none
Qual a diferença entre uma tabela temporária com ##temp_table ou @table? RRS feed

  • Pergunta

  • Olá Pessoal

    Gostaria de saber qual é a diferença principal entre você criar uma tabela temporária utilizando o DECLARE @table TABLE e usando o ##table_temp.

    A minha dúvida surgi, pois muitos fóruns por ai  dizem que  tabela temporária com os  (# ou ##) não ficam na memória e sim fisicamente criada. Já a arroba @ fica completamente na memória assim sendo mais rápida.

    Resumindo, quais são as principais características de cada um em si, suas vantagens e desvantagens e a principal diferença da mesma.


    **** SER A RESPOSTA FOR UTIL, NÃO ESQUEÇA DE MARCA-LÁ =P ****

    quarta-feira, 18 de dezembro de 2013 13:22

Respostas

  • Rafael,

         As principais características:

         # - Tabela temporária local. Outra sessão não consegue ver a sua tabela.

         ## Tabela temporária global. Todas as sessões conseguem ver e atualizar a tabela

         @ - Variável do tipo table. É uma variável. Somente sua sessão consegue vê-la.

         O  que você citou é verdade, mas, claro, tudo depende:

         Tabelas temporárias, por "baixo dos panos" são criadas fisicamente na base tempdb. Variáveis do tipo table ficam somente em memória...

         E porque "depende"?? Num exemplo hipotético, se você tiver um disco SSD de altíssima performance para a sua base tempdb, disco de baixa perforamance para pagefile e 1Gb de memória (entenda como um "gargalo" de memória), provavelmente a tabela temporária tenha melhor performance que a variável do tipo table, isso porque o sql terá que fazer swap em disco (que neste exemplo é de baixa performance, normalmente armazenado em C:) porque ele não tem memória suficiente para manter o cache do SQL (pouca memória), mas alta performance do disco SSD na tempdb. Agora, se a situação for inversa, disco de performance baixa e 128Gb de memória, a variável do tipo table provavelmente terá melhor performance... Lembre-se também que a quantidade de usuários criando essas estruturas e índices para ler esses dados também tem impacto sobre sua performance.

        Uma dica é fazer o teste com as duas opções e ver qual tem a melhor performance.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008


    quarta-feira, 18 de dezembro de 2013 13:45
    Moderador