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

Vil TSQL returnere hurtigere resultater end lagret procedure i SQL Server

I dine forespørgsler skal du tilføje OPTION(OPTIMIZE FOR UNKNOWN) (som sidste klausul) for at forhindre parametersniffing. For syntaks og forklaring, se dokumentationen på Forespørgselstip .

Hvad SQL Server gør første gang, den kører en lagret procedure, er at optimere eksekveringsplanerne for de parametre, der blev sendt til den. Dette gøres i en proces, der kaldes Parameter Sniffing .

Generelt cachelagres eksekveringsplaner af SQL Server, så SQL Server ikke behøver at rekompilere hver gang for den samme forespørgsel. Næste gang proceduren køres, vil SQL Server genbruge eksekveringsplanen(erne) til forespørgslerne i den... Udførelsesplanen(erne) kan dog være totalt ineffektive, hvis du kalder den (dem) med forskellige parametre .

Den mulighed, jeg gav dig, vil fortælle SQL-kompileren, at udførelsesplanen ikke skal være optimeret til specifik parametre, men snarere for enhver parameter, der sendes til den lagrede procedure.

For at citere dokumentationen:

I nogle tilfælde kan Stored Procedures drage fordel af Parameter Sniffing, i nogle tilfælde gør de det ikke. For de lagrede procedurer, der ikke drager fordel af Paramater Sniffing, kan du tilføje muligheden til hver forespørgsel, der bruger en af ​​parametrene i den lagrede procedure.



  1. Mysql - slet fra flere tabeller med én forespørgsel

  2. Udelad top og bund n rækker i SQL

  3. Sådan gemmer du række/kolonne med mysql-data i array

  4. Brug af entity frameworket med en MySQL DB og modeldesigneren henter ikke lagrede proc-parametre