sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué una consulta parametrizada produce un plan de consulta mucho más lento frente a una consulta no parametrizada?

Parece que el planificador de consultas ha tomado una decisión en la consulta literal que se basa en la información que ya tiene. Tendría estadísticas que puede consultar de manera eficiente en función de la distribución de datos proporcionados en su literal específico.

La consulta parametrizada ha elegido la consulta que cree que es más justa para todos los datos de su tabla, lo que notará son muchos bucles anidados (rendimiento =malo).

¿Quizás podría probar y ejecutar las herramientas de optimización de base de datos en su base de datos para ver si algunos índices podrían ayudarlo aquí?

Específicamente en su consulta, intente esto:

declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))

Pero desconfiaría de hacer esto sin estar seguro de que los datos contenidos en esta consulta no cambiarán y que su consulta sobre este plan SIEMPRE será más eficiente.