Hey guys!
Nesse post de hoje, eu gostaria de compartilhar esse vídeo que acabei de fazer, demonstrando, na prática, as mudanças que tivemos no SQL Server 2019 em relação a estimativa de linhas em variáveis do tipo tabela, onde o otimizador de consultas sempre estimava 1 linha, independente do volume de dados, ao utilizar variáveis do tipo tabela, fazendo com que muitas vezes, fosse escolhido um operador não otimizado para o volume de dados real, prejudicando drasticamente a performance de consultas que utilizassem essas tabelas em memória.
Embora esse problema possa ser contornado utilizando OPTION(RECOMPILE), trace flag 2453 ou hints específicos para se utilizar um determinado operador, a versão 2019 do SQL Server introduziu um novo conceito para resolver isso de forma transparente, chamado compilação adiada de variável de tabela (table variable deferred compilation), que faz com que a compilação da estimativa da consulta seja adiada até a primeira execução real, num comportamento idêntico ao de tabelas temporárias, fazendo com que a quantidade de linhas estimadas seja bem mais próxima do volume real, ao invés da estimativa de apenas 1 linha, como nas versões anteriores.
Embora eu já tenha comentado sobre isso no artigo SQL Server 2019 – Lista de novidades e novos recursos e também no artigo Webcast – Comemoração 300 posts + Novidades do SQL Server 2019 (04/10/2018 – 21h), eu acabei não me aprofundando muito e demonstrando isso na prática, que é o meu intuito nesse vídeo.
And that's it, folks!
Um forte abraço e até a próxima!