Dado que o otimizador não pode levar o tempo necessário (ele precisa minimizar o tempo de execução e não contribuir com ele) para explorar todos os possíveis planos de execução que às vezes são cortados.
Eu queria saber se isso pode ser substituído, para que você possa dar ao otimizador o tempo todo em necessidades (ou uma certa quantidade de milissegundos).
Não preciso disso (atm), mas posso imaginar um cenário em que uma consulta complexa é executada em um loop restrito e você deseja criar o plano ideal e armazená-lo em cache antes.
Claro que você tem um loop apertado, você deve reescrever a consulta para que ela desapareça, mas aceite comigo.
Isso é mais uma questão de curiosidade e também para ver se às vezes há uma diferença entre uma otimização em curto-circuito e uma otimização completa.
Acontece que você pode dar mais tempo ao otimizador com o sinalizador de rastreamento 2301. Não é exatamente o que eu estava perguntando, mas chega perto.
As melhores informações que encontrei sobre isso estão em Query Processor Modeling Extensions no SQL Server 2005 SP1 por Ian Jose.
Use este sinalizador de rastreamento com cuidado! Mas isso pode ser útil ao apresentar melhores planos. Veja também:
- Os artigos marcados com "nível de otimização" por Grant Fritchey.
- Antes de atualizar para o SQL Server 2008… por Brent Ozar.
- Opções de ajuste para o SQL Server ao executar em cargas de trabalho de alto desempenho pelo Suporte da Microsoft.
Eu estava pensando em consultas com muitas junções em que o espaço da solução para a ordem de junção explode exponencialmente. As heurísticas usadas pelo SQL Server são muito boas, mas eu queria saber se o otimizador proporia uma ordem diferente se tivesse mais tempo (no intervalo de segundos ou até minutos).