No SQL Server, existe algum limite de tempo para avaliar os planos candidatos? É verdade que o otimizador não pode avaliar todos os planos possíveis, então, na verdade, quando ele decide sair e ir para a execução ideal do plano?
Se o limite existir, há alguma alteração no limite para o SQL Server 2017?
Até onde eu sei, não existe um "limite" rígido em termos de algum valor absoluto de tempo que o otimizador procura por um plano.
Cada execução é orçada em uma porcentagem de tempo para explorar as opções do plano. Há uma série de fatores que entram nisso - eu confio que esses fatores estão sempre mudando um pouco nos bastidores entre as versões do SQL Server - há melhorias no otimizador feitas e algumas novas opções ou abordagens de opções podem surgir, o orçamento calculado pode mudança, etc
O SQL Server (felizmente) usa um processo em que procura um "plano bom o suficiente" ou um plano razoável. Quanto mais complexa for sua consulta, mais insanamente alto será o número de permutações de opções que o otimizador terá para executar sua consulta. Então, queremos que ele encontre um plano razoável o suficiente e siga em frente - para que nossa consulta possa realmente começar a ser executada. O ponto principal é "gastar tempo suficiente para me dar um plano que deve funcionar bem, não gaste muito tempo otimizando e explorando opções"
Realmente não temos controle sobre isso. E realmente não deveríamos. Devemos olhar para o plano que o otimizador criou e focar mais em ajustar nossas consultas, ajustar nossos projetos e ajustar nossos índices para melhor atender às necessidades de negócios.
Outra maneira - em cerca de 15 anos de SQL Server Tuning, eu realmente nunca tive que considerar "que droga, se o otimizador tivesse mais 4 ms de otimização" - normalmente tudo o que você precisa saber para tornar suas consultas mais rápidas está certo lá no plano de consulta que você recebeu, ou explorando questões como "que tal um plano serial em vez de um plano paralelo? o que acontece se eu lançar uma dica de junção apenas para forçar a ordem e ver quais decisões o otimizador toma para que eu possa reescrever de acordo ? E as metas de linha? E se eu dividir essa lógica etc.