Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

TSQL restituirà risultati più rapidi rispetto alla stored procedure in SQL Server

Nelle tue query, aggiungi OPTION(OPTIMIZE FOR UNKNOWN) (come ultima clausola) per prevenire lo sniffing dei parametri. Per la sintassi e la spiegazione, vedere la documentazione su Suggerimenti per le query .

Ciò che SQL Server esegue la prima volta che esegue una stored procedure è ottimizzare i piani di esecuzione per i parametri che gli sono stati passati. Questo viene fatto in un processo chiamato Parameter Sniffing .

In generale, i piani di esecuzione vengono memorizzati nella cache da SQL Server in modo che SQL Server non debba ricompilare ogni volta per la stessa query. La prossima volta che la procedura viene eseguita, SQL Server riutilizzerà i piani di esecuzione per le query in essa contenuti... Tuttavia, i piani di esecuzione potrebbero essere totalmente inefficienti se li chiami con parametri diversi .

L'opzione che ti ho dato dirà al compilatore SQL che il piano di esecuzione non deve essere ottimizzato per specifici parametri, ma piuttosto per qualsiasi parametro che viene passato alla stored procedure.

Per citare la documentazione:

In alcuni casi le stored procedure possono trarre vantaggio dallo sniffing dei parametri, in altri no. Per le stored procedure che non beneficiano dello sniffing dei parametri, puoi aggiungere l'opzione a ciascuna query che utilizza uno qualsiasi dei parametri della stored procedure.