experimentado el mismo comportamiento. (establecer opciones iguales) Consulta regular produciendo un plan paralelo y usando sp_executesql produjo un plan en serie.
declare @xyzParam1 datetime,@xyzParam2 datetime
select @xyzParam1='Sep 1 2014 12:00:00:000AM',@xyzParam2='Sep 26 2014 11:59:59:000PM'
SELECT * FROM Theview WHERE departuretime BETWEEN @xyzParam1 AND @xyzParam2
;
vs
exec sp_executesql N'SELECT * FROM Theview WHERE departuretime BETWEEN @xyzParam1 AND @xyzParam2',N'@xyzParam1 datetime,@xyzParam2 datetime',@xyzParam1='Sep 1 2014 12:00:00:000AM',@xyzParam2='Sep 26 2014 11:59:59:000PM'
I logrado obtener un resultado óptimo modificando la vista utilizada debido a que contenía, por ejemplo, left se une a los datos que siempre se esperaba. (convertido a INNER join)
Ahora la consulta regular elige el mismo plan que el obtenido con sp_executesql y el rendimiento es mucho mejor.
Me pregunto cuando el mito "sp_executesql no guarda en caché" morirá alguna vez - lea [La maldición y las bendiciones de SQL dinámico] (http://www.sommarskog.se/dynamic_sql.html) –
@OMG Ponies - ¿Podría el parámetro sniffing ser un problema con sp_ExecuteSQL? – JNK
@JNK: Desde que experimenté el comportamiento, de todos modos, puse el olfateo anti-param por defecto. –