webForumDet fria alternativet
Logga in / Bli medlem

WITH (NOLOCK)

Databaser & SQL

4 svar · 394 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Trådstart#1

Vad betyder det igentligen?

Medlem sedan mars 2005149 inlägg
#2

http://www.google.com/search?lr=&ie=UTF-8&oe=UTF-8&q=WITH%20(NOLOCK)

Medlem sedan okt. 20041 556 inlägg
#3

Kan inte engelska...

Medlem sedan dec. 19995 876 inlägg
#4

Normalt när du frågar efter en post (select username from users where username='travoni') så kan den posten vara låst (på grund av en update eller liknade). Ibland kan det vara så att det inte är den aktuella posten som är berörd av updaten. Detta eftersom en update kan innebära en lock av den aktuella posten, men även innebära en lock av en hel sida (med poster).

Med nolock så säger du att du vill hämta datan även om posten är låst. Det innebärt att du kan hämta dålig data. Om du exempelvis kör med transaktioner. Men om datan du skall hämta inte är så känslig för förändringar och du tycker att det är ok att den kanske är mitt i en transaktion så tycker jag att du skall använda nolock (om du har problem med att posterna är låsta och du får timeouts).

Du kan även använda rowlock på updates för att minska risken för att låsa hela sidor. Dock skall du bara använda rowlock när du vet att din update påverkar få poster, för annars kommer du får väldigt många lås som tar mycket prestanda. Så därför skall du låta sql-server styra (skriv inget) om den skall köra pagelock eller rowlock vid din update .

Medlem sedan okt. 20041 556 inlägg
#5

Bra förklarat, då får det bli with nolock helt enkelt (i detta fall)
Men gäller detta även vid en count?
select count(username) from users with (nolock)

258 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)