O SQL Server 2017 apresenta um aprimoramento muito útil ao showplan para ver quais estatísticas foram usadas para gerar um plano: https://learn.microsoft.com/en-nz/archive/blogs/sql_server_team/sql-server-2017-showplan-enhancements
No entanto, não consigo encontrá-lo no meu plano de execução. Tenho a seguinte consulta no banco de dados StackOverflow:
Use StackOverflow2010;
DROP TABLE IF EXISTS #tempPosts;
CREATE TABLE #tempPosts(
Id int
)
INSERT INTO #tempPosts
SELECT ID FROM dbo.Posts
WHERE OwnerUserId = 26837
SELECT Title, u.DisplayName, pt.Type FROM dbo.Posts p
INNER JOIN #tempPosts temp
ON p.Id = temp.Id
INNER JOIN dbo.Users u
ON p.OwnerUserId = u.Id
INNER JOIN dbo.PostTypes pt
ON p.PostTypeId = pt.Id
OPTION(RECOMPILE)
Liguei o Include Actual Execution Plan
para capturar o plano e não consegui encontrar OptimizerStatsUsage
o campo no plano:
Qual poderia ser o motivo de OptimizerStatsUsage
não aparecer no meu plano de execução? Há alguma configuração ou etapa adicional necessária para ver esta propriedade?
Obrigado por qualquer informação!
o banco de dados stackoverflow2010 pode ser definido para uma versão mais baixa do nível de compatibilidade. Durante meu teste, ele é definido como 100, que é 2008. Você precisa alterar o nível de compatibilidade do banco de dados para pelo menos 2014(120) OU em sua consulta, você pode usar a dica do otimizador de consulta como esta:
Inicialmente pensei que isso poderia ser devido a uma versão anterior do SSMS, mas usar a versão 18.11.1 (versão mais antiga) ainda funciona ao alterar o nível de compatibilidade do banco de dados ou usar a dica do otimizador de consulta.
Então eles
OptimizerStatsUsage
aparecerão.Também na sua captura de tela, o valor
CardinalityEstimationModelVersion
era 70 (usando a versão antiga).