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

Por que essa subconsulta (não correlacionada) está causando esses problemas?


Minha experiência diz que, quanto mais complexas forem suas consultas, menos capaz será o otimizador de SQL para criar planos hábeis. Aqui você tem 16 junções, algumas ou a maioria são junções externas, você tem pelo menos uma subconsulta... jogue índices suficientes, cardinalidades, exibições, aplicações externas e quem sabe o que mais e ninguém, nem mesmo a Microsoft engenheiros*, podem descobrir rotinas que irão gerar de forma uniforme e regular os planos mais otimizados.

O que você descreveu, eu experimentei várias vezes - mude uma coisa simples em uma consulta confusa e tudo é uma ordem de magnitude mais rápido (ou range os dentes, mais lento). Não tenho método para determinar quando complexo é muito complexo, é mais um sentimento do que qualquer outra coisa. Minha regra geral é, se parecer muito longo ou muito complexo, simplifique onde puder, como seu valor aninhado único pré-selecionado ou quebrar parte da consulta que sempre execute rapidamente com um pequeno conjunto de resultados e execute-o primeiro e armazene os resultados em uma tabela temporária.

(* Por favor, note que este é um sarcsam leve)