Før jeg arbejdede på Stack Overflow, var jeg imod NOLOCK
på princippet, at du potentielt kunne udføre en SELECT
med NOLOCK
og få resultater tilbage med data, der kan være forældede eller inkonsekvente. En faktor at tænke på er, hvor mange poster der kan indsættes/opdateres på samme tid en anden proces kan vælge data fra den samme tabel. Hvis dette sker meget, er der stor sandsynlighed for dødvande, medmindre du bruger en databasetilstand såsom READ COMMITED SNAPSHOT
.
Jeg har siden ændret mit perspektiv på brugen af NOLOCK
efter at have set, hvordan det kan forbedre SELECT
ydeevne samt eliminere dødvande på en massivt belastet SQL Server. Der er tidspunkter, hvor du måske er ligeglad med, at dine data ikke ligefrem er 100 % forpligtede, og du har brug for resultater hurtigt tilbage, selvom de kan være forældede.
Stil dig selv et spørgsmål, når du tænker på at bruge NOLOCK
:
Indeholder min forespørgsel en tabel, der har et højt antal INSERT
/UPDATE
kommandoer, og er jeg ligeglad med, om de data, der returneres fra en forespørgsel, måske mangler disse ændringer på et givet tidspunkt?
Hvis svaret er nej, så brug NOLOCK
for at forbedre ydeevnen.
NOLOCK
søgeord i kodebasen for Stack Overflow og fundet 138 forekomster, så vi bruger det en del steder.