Tente mascarar o parâmetro de entrada.
Acho que a recompilação não está funcionando por causa do padrão especificado (EDIT :Ou parâmetro enviado na primeira chamada) sendo rastreado em tempo de compilação. Portanto, recompilar não tem efeito.
Eu vi uma enorme diferença entre os planos estimados simplesmente alterando o padrão de, digamos, zero para NULL, ou não tendo um.
ALTER PROCEDURE [usp_debug_mightwork]
@DATA_DT_ID AS int = 20081130
AS
BEGIN
DECLARE @IDATA_DT_ID AS int
SET @IDATA_DT_ID = @DATA_DT_ID
-- Stuff here that depends on IDATA_DT_ID
END
Acho que este artigo explica...
EDITAR:
Novo link sobre planos e parâmetros de consulta . Ainda é um parâmetro sniffing se um padrão é especificado ou não.
Tipo de artigo relacionado sobre constantes e planos