Voordat ik aan Stack Overflow werkte, was ik tegen NOLOCK
op de principal dat u mogelijk een SELECT
. zou kunnen uitvoeren met NOLOCK
en krijg resultaten terug met gegevens die mogelijk verouderd of inconsistent zijn. Een factor om over na te denken is hoeveel records er tegelijkertijd kunnen worden ingevoegd/geüpdatet terwijl een ander proces gegevens uit dezelfde tabel selecteert. Als dit vaak gebeurt, is de kans op impasses groot, tenzij u een databasemodus gebruikt zoals READ COMMITED SNAPSHOT
.
Ik heb sindsdien mijn kijk op het gebruik van NOLOCK
. veranderd na getuige te zijn geweest van hoe het SELECT
. kan verbeteren prestaties en het elimineren van impasses op een enorm belaste SQL Server. Er zijn momenten dat het u niet kan schelen dat uw gegevens niet precies 100% zijn vastgelegd en dat u snel resultaten nodig heeft, ook al zijn ze mogelijk verouderd.
Stel uzelf een vraag wanneer u denkt aan het gebruik van NOLOCK
:
Bevat mijn zoekopdracht een tabel met een hoog aantal
INSERT
/UPDATE
commando's en kan het mij schelen of de gegevens die door een zoekopdracht worden geretourneerd deze wijzigingen op een bepaald moment missen?
Als het antwoord nee is, gebruik dan NOLOCK
om de prestaties te verbeteren.
NOLOCK
trefwoord in de codebasis voor Stack Overflow en vond 138 instanties, dus we gebruiken het op nogal wat plaatsen.