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

OPCIÓN (RECOMPILAR) es siempre más rápido; ¿Por qué?

Hay veces que usar OPTION(RECOMPILE) tiene sentido. En mi experiencia, la única vez que esta es una opción viable es cuando usa SQL dinámico. Antes de explorar si esto tiene sentido en su situación, le recomendaría reconstruir sus estadísticas. Esto se puede hacer ejecutando lo siguiente:

EXEC sp_updatestats

Y luego recrear su plan de ejecución. Esto garantizará que, cuando se cree su plan de ejecución, se utilice la información más reciente.

Agregando OPTION(RECOMPILE) reconstruye el plan de ejecución cada vez que se ejecuta su consulta. Nunca he oído que se describa como creates a new lookup strategy pero tal vez solo estemos usando diferentes términos para lo mismo.

Cuando se crea un procedimiento almacenado (sospecho que está llamando a sql ad-hoc desde .NET, pero si está utilizando una consulta parametrizada, esto termina siendo una llamada de proceso almacenado) SQL Server intenta determinar el plan de ejecución más efectivo para esta consulta basado en los datos en su base de datos y los parámetros pasados ​​(olfateo de parámetros), y luego almacena en caché este plan. Esto significa que si crea la consulta donde hay 10 registros en su base de datos y luego la ejecuta cuando hay 100 000 000 registros, es posible que el plan de ejecución en caché ya no sea el más efectivo.

En resumen, no veo ninguna razón por la que OPTION(RECOMPILE) sería un beneficio aquí. Sospecho que solo necesita actualizar sus estadísticas y su plan de ejecución. La reconstrucción de estadísticas puede ser una parte esencial del trabajo de DBA dependiendo de su situación. Si aún tiene problemas después de actualizar sus estadísticas, le sugiero que publique ambos planes de ejecución.

Y para responder a su pregunta, sí, diría que es muy inusual que su mejor opción sea volver a compilar el plan de ejecución cada vez que ejecuta la consulta.