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

OPTION (GENKOMPILER) er altid hurtigere; Hvorfor?

Der er tidspunkter, hvor man bruger OPTION(RECOMPILE) giver mening. Efter min erfaring er den eneste gang, dette er en levedygtig mulighed, når du bruger dynamisk SQL. Før du undersøger, om dette giver mening i din situation, vil jeg anbefale at genopbygge din statistik. Dette kan gøres ved at køre følgende:

EXEC sp_updatestats

Og derefter genskabe din udførelsesplan. Dette vil sikre, at når din eksekveringsplan er oprettet, vil den bruge de seneste oplysninger.

Tilføjer OPTION(RECOMPILE) genopbygger udførelsesplanen, hver gang din forespørgsel udføres. Jeg har aldrig hørt det beskrevet som creates a new lookup strategy men måske bruger vi bare forskellige udtryk for det samme.

Når en lagret procedure er oprettet (jeg formoder, at du kalder ad-hoc sql fra .NET, men hvis du bruger en parametriseret forespørgsel, ender dette med at blive et lagret proc-kald) forsøger SQL Server at bestemme den mest effektive eksekveringsplan for denne forespørgsel baseret på dataene i din database og de parametre, der sendes ind (parametersniffing), og cacher derefter denne plan. Det betyder, at hvis du opretter forespørgslen, hvor der er 10 poster i din database, og derefter udfører den, når der er 100.000.000 poster, er den cachelagrede eksekveringsplan muligvis ikke længere den mest effektive.

Sammenfattende - jeg kan ikke se nogen grund til at OPTION(RECOMPILE) ville være en fordel her. Jeg formoder, at du bare skal opdatere din statistik og din eksekveringsplan. Genopbygning af statistik kan være en væsentlig del af DBA-arbejdet afhængig af din situation. Hvis du stadig har problemer efter at have opdateret din statistik, vil jeg foreslå, at du sender begge udførelsesplaner.

Og for at besvare dit spørgsmål - ja, jeg vil sige, at det er meget usædvanligt, at din bedste mulighed er at omkompilere eksekveringsplanen, hver gang du udfører forespørgslen.



  1. Tilslutning af Ignition til Microsoft Access

  2. Udforsk SQL Server-gendannelsesdatabase med gendannelse vs ingen gendannelsesmuligheder

  3. Arbejde med triggere i en MySQL-database - en vejledning

  4. Muligt at indstille standardskema fra forbindelsesstrengen?