Livre -se do bolo de mesa no Plano de Execução do SQL Server
-
20-09-2019 - |
Pergunta
Eu tenho uma consulta que cria várias tabelas temporárias e depois insere dados nelas. Pelo que eu entendo, isso é uma causa potencial de bobo de mesa. Quando olho para o meu plano de execução, a maior parte do meu processamento é gasta em bobo de mesa. Existem boas técnicas para melhorar esses tipos de problemas de desempenho? O uso de uma visão ou um CTE me ofereceria algum benefício sobre as tabelas temporárias?
Também notei que, quando o mouse sobre cada spool de tabela, a lista de saída é da mesma tabela temporária.
Solução
Bem, com as informações que você deu, só posso dizer isso: o otimizador de consulta escolheu o melhor plano possível. Ele usa carretéis de tabela para acelerar a execução. Alternativas que não usam carretéis de mesa seriam ainda mais lentas.
Que tal mostrar a consulta, o (s) esquema (s) da tabela (s) e a cardinalidade e o plano.
Atualizar
Eu certamente entendo se você não pode nos mostrar a consulta. Mas é realmente difícil adivinhar por que o spool é preferido pelo mecanismo, sabendo que existem detalhes específicos. Eu recomendo que você analise o blog de Craig Freedman, ele é um engenheiro da equipe do Otimizador de consultas e explicou muito do funcionamento interno do SQL 2005/2008 Optimizer. Aqui estão algumas entradas que pude descobrir rapidamente que tocam o tópico de spool de uma forma ou de outra:
A equipe de suporte ao cliente da SQL também tem um blog interessante em http://blogs.msdn.com/psssql/
E 'sqltips' (o blog de equipe do mecanismo relacional) tem algumas dicas, como Operadores de bobina no plano de consulta ...