Před prací na Stack Overflow jsem byl proti NOLOCK
na principu, že byste mohli potenciálně provést SELECT
s NOLOCK
a získat zpět výsledky s daty, které mohou být zastaralé nebo nekonzistentní. Faktorem k zamyšlení je, kolik záznamů lze vložit/aktualizovat současně, jiný proces může vybírat data ze stejné tabulky. Pokud k tomu dochází často, existuje vysoká pravděpodobnost uváznutí, pokud nepoužijete databázový režim, jako je READ COMMITED SNAPSHOT
.
Od té doby jsem změnil svůj pohled na používání NOLOCK
poté, co jsme viděli, jak to může zlepšit SELECT
výkon a také odstranění zablokování na masivně zatíženém serveru SQL Server. Jsou chvíle, kdy vám může být jedno, že vaše data nejsou přesně 100% odevzdaná a potřebujete rychle zpět výsledky, i když mohou být zastaralé.
Když přemýšlíte o použití NOLOCK
, položte si otázku :
Zahrnuje můj dotaz tabulku, která má vysoký počet
INSERT
/UPDATE
a zajímá mě, jestli v datech vrácených z dotazu mohou v daném okamžiku tyto změny postrádat?
Pokud je odpověď ne, použijte NOLOCK
ke zlepšení výkonu.
NOLOCK
klíčové slovo v kódové základně pro Stack Overflow a našlo 138 instancí, takže je používáme na několika místech.