2011-01-28 14 views
14

Mi comprensión de la opción WITH RECOMPILE con procedimientos almacenados se limita generalmente a la utilización de la cláusula con una sola llamada de procedimiento almacenado como un parámetro de arrastre:SQL Server: ¿Efectos de usar 'WITH RECOMPILE' en la definición de proc?

exec sp_mystoredproc 'Parameter1', 2, '1/28/2011' with recompile 

¿Cuáles son los efectos de incluir en la definición WITH RECOMPILE proc real? ¿Esto recompila el proceso cada vez que se ejecuta? ¿O solo la próxima vez que se modifique el proceso?

Ejemplo:

CREATE PROCEDURE [dbo].[sp_mystoredproc] 
    (@string1   varchar(8000) 
    ,@int2    int = 2 
    ,@dt_begin   DATETIME 
    with recompile 
AS 
... proc code ... 

Respuesta

25

Esto hace que el proc reconstruir los planes de todas las consultas cada vez que se ejecute.

Úselo y los valores de los parámetros de proceso afectan a la selectividad del filtro.

Say, el plan óptimo para esta consulta:

SELECT * 
FROM orders 
WHERE order_date BETWEEN @begin_report AND @from_report 

será un análisis completo si el intervalo de tiempo es grande o examinar un índice si es pequeña.

Creado usando WITH RECOMPILE, el proceso construirá el plan en cada ejecución; sin uno, se mantendrá en un solo plan (pero ahorrará tiempo en la recompilación).

Esta sugerencia se utiliza generalmente en procesos que procesan grandes volúmenes de datos y realizan informes complejos, cuando el tiempo general de consulta es grande y el tiempo para reconstruir el plan es insignificante en comparación con el tiempo ahorrado por un mejor plan.

Cuestiones relacionadas