1) Ja , en markering med NOLOCK
slutförs snabbare än ett normalt val.
2) Ja , en markering med NOLOCK
kommer att tillåta andra frågor mot den påverkade tabellen att slutföras snabbare än ett normalt urval.
Varför skulle detta vara det?
NOLOCK
vanligtvis (beroende på din DB-motor) innebär att ge mig dina data, och jag bryr mig inte om vilket tillstånd det är i, och bry dig inte om att hålla det stilla medan du läser från det. Det är på en gång snabbare, mindre resurskrävande och väldigt mycket farligt.
Du bör varnas för att aldrig göra en uppdatering från eller utföra något systemkritiskt, eller där absolut korrekthet krävs med hjälp av data som härrör från en NOLOCK
läsa. Det är absolut möjligt att denna data innehåller rader som raderades under sökningens körning eller som har raderats i andra sessioner som ännu inte har slutförts. Det är möjligt att denna data inkluderar rader som delvis har uppdaterats. Det är möjligt att dessa data innehåller poster som bryter mot begränsningar för främmande nyckel. Det är möjligt att denna data exkluderar rader som har lagts till i tabellen men som ännu inte har konfigurerats.
Du har verkligen inget sätt att veta vilken status data är.
Om du försöker få saker som en radräkning eller andra sammanfattande data där en viss felmarginal är acceptabel, så NOLOCK
är ett bra sätt att öka prestanda för dessa frågor och undvika att de påverkar databasens prestanda negativt.
Använd alltid NOLOCK
antyda med stor försiktighet och behandla all data den returnerar misstänkt.