Recentemente terminei de ler o Plan Caching no SQL Server 2008 e fiquei confuso. Parece que, além de liberar totalmente o cache do plano ou exigir explicitamente a recompilação de um procedimento armazenado, as recompilações de procedimentos armazenados do SQL Server 2008 em diante são feitas no nível da instrução, e não no nível do procedimento armazenado.
Portanto, além de liberar explicitamente o cache ou exigir recompilações (por exemplo WITH RECOMPILE
), o que recompila um procedimento armazenado completo no SQL Server 2019 em vez de apenas recompilar instruções individuais?
Para dar um exemplo de onde estou confuso, considere o procedimento a seguir.
CREATE PROCEDURE FOO AS
BEGIN
SELECT * INTO #temp1 FROM table1
INSERT BAR1 SELECT * FROM #temp1
INSERT BAR2 SELECT * FROM #temp1
END
Posso pensar em muitas coisas que poderiam causar SELECT * INTO #temp1 FROM table1
a recompilação, mas seria estranho recompilar sem que as próximas linhas também recompilassem. Isso me faz pensar que deve haver algumas coisas no SQL Server que farão com que procedimentos armazenados inteiros sejam recompilados.