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

OPDATERING + MED (ROWLOCK) + CTE

NOLOCK gælder ikke for den del af forespørgslen, der refererer til den tabel, der skal ændres. I SQL Server-opdateringssætninger U-lås hver række kort, mens den testes. Dette er en mekanisme til at undgå dødvande. Det forhindrer flere opdateringer af hver S-lås en række til læsning og prøv derefter at X-låse den.

Du kan ikke få U-låsene til at gå væk AFAIK. Men du kan reducere antallet af rækker U-låst til det absolutte minimum ved selv at deltage:

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

Dette tilføjer lidt overhead, men det giver dig mulighed for at bruge NOLOCK til læsning.

Overvej at bruge snapshot-isolering til læsningerne. NOLOCK har visse problemer, såsom forespørgsler, der afbrydes tilfældigt.




  1. Valg af en database i mysql med mellemrum i navnet

  2. Få adgang til eksperternes syn på MVP-topmødet i 2020

  3. Endnu en grund til at bruge NOEXPAND-tip i Enterprise Edition

  4. mySQL SELECT kommende fødselsdage