NOLOCK
is niet van toepassing op het deel van de query dat verwijst naar de tabel die moet worden gewijzigd. In SQL Server-update-instructies U-lock elke rij kort terwijl deze wordt getest. Dit is een mechanisme om een impasse te vermijden. Het voorkomt meerdere updates voor elke S-lock een rij om te lezen en probeert deze vervolgens te X-locken.
U kunt de U-sloten niet AFAIK laten verdwijnen. Maar u kunt het aantal rijen U-locked tot het absolute minimum verminderen door zelf samen te voegen:
update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
Dit voegt een beetje overhead toe, maar het stelt je in staat om NOLOCK
. te gebruiken om te lezen.
Overweeg om snapshot-isolatie te gebruiken voor de leesbewerkingen. NOLOCK
heeft bepaalde problemen, zoals het willekeurig afbreken van zoekopdrachten.