sql >> Databasteknik >  >> RDS >> Sqlserver

UPPDATERA + MED (ROWLOCK) + CTE

NOLOCK gäller inte den del av frågan som refererar till tabellen som ska ändras. I SQL Server-uppdateringssatser U-låser varje rad kort medan den testas. Detta är en mekanism för att undvika dödläge. Det förhindrar flera uppdateringar av varje S-lås en rad för läsning och försök sedan att X-låsa den.

Du kan inte få U-låsen att försvinna AFAIK. Men du kan minska antalet U-låsta rader till det absoluta minimum genom att själv gå med:

update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)

Detta lägger till lite overhead men det låter dig använda NOLOCK för läsning.

Överväg att använda ögonblicksbildsisolering för läsningarna. NOLOCK har vissa problem som slumpmässigt avbrytande frågor.




  1. Snabbtips om relationsdatabasdesign för MySQL

  2. Hur returnerar man distinkta värden och deras antal?

  3. Säkerhetskopiera mySQL-databaser från localhost som körs på Wamp-servern

  4. Anropsbeteckning för PL/SQL-subrutiner i Oracle Database