Julgue os itens subsecutivos, com relação ao tunning de banc...
No SQL Server, o uso de variáveis de tabela permite aumentar o desempenho de determinadas consultas.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: E - errado
A afirmação de que o uso de variáveis de tabela no SQL Server sempre permite aumentar o desempenho de determinadas consultas não é correta. A eficiência de variáveis de tabela em comparação a estruturas semelhantes, como tabelas temporárias ou tabelas comuns, depende do contexto da consulta e da quantidade de dados manipulados.
Variáveis de tabela podem ser benéficas em cenários onde:
- O conjunto de dados é pequeno;
- São necessárias operações rápidas em memória;
- Não haja necessidade de estatísticas ou índices complexos.
Contudo, em situações onde o volume de dados é significativo ou é necessário um plano de execução mais elaborado, as tabelas temporárias ou até mesmo tabelas comuns podem oferecer melhor desempenho, uma vez que o otimizador de consulta do SQL Server pode criar estatísticas que ajudam a determinar o plano de execução mais eficiente. Além disso, com tabelas temporárias e tabelas comuns, é possível criar índices que podem acelerar determinadas operações.
Portanto, é imprescindível avaliar cada situação individualmente, e não assumir que variáveis de tabela são um meio automático de otimização.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Apesar de nunca ter usado este tipo de variável, usei a lógica de que, pelo fato de estar em memória, terá um bom desempenho. Todavia a banca deu como errada. Veja o que diz o devmedia
Tenho notado que este recurso é pouco utilizado por desenvolvedores T-SQL. Analisando as consultas realizadas nas bases de dados em que administro. Observei que muitos trechos de código T-SQL poderiam ser substituídos por tabelas variáveis para ganho de desempenho. Visando o desempenho e a melhor utilização dos recursos dos servidores de banco de dados. Podemos trocar a utilização das tabelas temporárias é se passasse a utilizar tabelas variáveis. Porém existem suas vantagens e desvantagens que coloco abaixo para todos analisarem; Vantagens - Devido à sua utilização estritamente local, tabelas criadas a partir de variável tipo TABLE não consomem recursos para controle de bloqueios; - A manipulação de dados em variáveis tipos TABLE é mais eficiente porque essas operações são minimamente locadas (um ROLLBACK após um INSERT não tem efeito em variáveis tipo TABLE); - Em função do seu escopo local, procedures que se utiliza de variáveis tipos TABLE estão sujeitas a um número menor de recopilações quando comparadas às tabelas temporárias. Desvantagens - A vida útil de uma tabela criada a partir de um variável tipo TABLE está limitada ao batch e/ou procedure onde é utilizada; - Com variáveis tipos TABLE não é permitido: Alteração da estrutura da tabela; Criação de índices não-cluster; Criação de constraints CHECK, DEFAULT; Criação e/ou atualização de estatísticas; Uma variável tipo TABLE não pode ser o destino de INSERT EXEC ou SELECT INTO; Uma variável tipo TABLE só pode ser referenciada por um comando SP_EXECUTESQL se a variável for criada. Variáveis tipo TABLE também consomem recursos do TempDB – na verdade tanto tabelas temporárias quanto variáveis tipo TABLE serão criadas em memória para pequeno volume de dados. O diferencial das tabelas temporárias é o log reduzido, o número baixo de recompilações e o ganho de desempenho com a ausência do controle de bloqueios. http://www.devmedia.com.br/trabalhando-com-tabelas-variaveis/11484
Creio que a banca deu como errada devido ao fato de que em variáveis de tabela não se pode criar índice, e possui um uso mais restrito, diferente das tabelas temporárias as quais se podem criar índices o que melhoraria a consulta relativamente.
Não há essa garantia: depende do tamanho da tabela carregada na variável table.
https://msdn.microsoft.com/en-us/library/ms175010.aspx
Na minha visão CORRETO
Variáveis Tabela fornecem os benefícios seguintes sobre tabelas temporárias para consultas em pequena escala que têm planos de consulta que não são alterados e quando há preocupações de recompilação:
- Uma variável table se comporta como uma variável local. Ela tem um escopo bem definido. Essa variável pode ser usada na função, no procedimento armazenado ou no lote em que ela é declarada.
- Dentro de seu escopo, uma variável table pode ser usada como uma tabela comum. Pode ser aplicada em qualquer lugar em que uma tabela ou expressão de tabela for usada em instruções SELECT, INSERT, UPDATE e DELETE. Porém, table não pode ser usada na seguinte instrução:
As variáveis table são automaticamente limpas ao término da função, do procedimento armazenado ou do lote em que estão definidas.
- As variáveis table usadas em procedimentos armazenados provocam menos recompilações dos procedimentos armazenados do que quando tabelas temporárias são usadas quando não há opções baseadas no custo que afetem o desempenho.
- As variáveis de tabela são completamente isoladas no lote que as cria, portanto, nenhuma nova resolução ocorre quando ocorre uma instrução CREATE ou ALTER, o que pode ocorrer com uma tabela temporária. As tabelas temporárias precisam dessa nova resolução para que a tabela possa ser referenciada a partir de um procedimento armazenado aninhado. As variáveis de tabela evitam isso completamente para que os procedimentos armazenados possam usar o plano que já está compilado, economizando recursos para processar o procedimento armazenado.
- As transações que envolvem variáveis table só existem durante uma atualização na variável table. Assim, variáveis table requerem menos recursos de log e bloqueio.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo