El problema que está experimentando se debe (casi con certeza) a un plan de consulta en caché, que es apropiado para algunas versiones de los parámetros pasados a la consulta, pero no para otros (también conocido como análisis de parámetros).
Esta es una ocurrencia común y, a menudo, empeora debido a estadísticas desactualizadas y/o índices muy fragmentados.
Primer paso :asegúrese de haber reconstruido todos sus índices y de que las estadísticas de las columnas no indexadas estén actualizadas. (Además, asegúrese de que su cliente tenga un trabajo de mantenimiento de índice programado regularmente)
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go
exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go
Esta es la referencia canónica:¿Lento en la aplicación, rápido en SSMS?
Si el problema persiste después de reconstruir los índices y actualizar las estadísticas, tiene algunas opciones:
-
Use SQL dinámico (pero lea esto primero:La maldición y las bendiciones de SQL dinámico)
-
Usa
OPTIMIZE FOR
-
Usa
WITH(RECOMPILE)