2011-01-28 2 views
14

mia comprensione dell'opzione WITH RECOMPILE con le stored procedure è generalmente limitato ad usare la clausola con una singola chiamata proc memorizzato come parametro finale:SQL Server: Effetti dell'utilizzo di "WITH RECOMPILE" nella definizione proc?

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

Quali sono gli effetti di includere WITH RECOMPILE nella definizione proc reale? Questo ricompila il proc ogni volta che viene eseguito? O solo la prossima volta che il proc è stato modificato?

Esempio:

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

risposta

25

Questo rende il proc ricostruire i piani di tutte le query ogni volta che viene eseguito.

Utile, i valori dei parametri proc influiscono sulla selettività del filtro.

Say, il piano ottimale per questa ricerca:

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

sarà una scansione completa se tale intervallo è grande o un indice scansione se è piccolo.

Creato utilizzando WITH RECOMPILE, il proc crea il piano per ogni esecuzione; senza uno, si atterrà a un singolo piano (ma farà risparmiare tempo sulla ricompilazione stessa).

Questo suggerimento è di solito usato in proc elaborazione di grandi volumi di dati e fare report complessi, quando il tempo complessivo di query è di grandi dimensioni e il tempo per la ricostruzione del piano è trascurabile rispetto al tempo risparmiato da un piano migliore.