Versuchen Sie, den Eingabeparameter zu maskieren.
Ich vermute, dass die Neukompilierung aufgrund der angegebenen Standardeinstellung (EDIT :Oder beim ersten Aufruf gesendeter Parameter) wird zur Kompilierzeit geschnüffelt. Neu kompilieren hat also keine Auswirkung.
Ich habe einen großen Unterschied zwischen den geschätzten Plänen festgestellt, indem ich einfach die Standardeinstellung von beispielsweise null auf NULL geändert oder keinen Plan habe.
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
Ich finde diesen Artikel erklärt...
BEARBEITEN:
Neuer Link zu Abfrageplänen und Parametern . Es ist immer noch ein Parameter-Sniffing, ob ein Standardwert angegeben ist oder nicht.
Art verwandter Artikel über Konstanten und Pläne