1) Ja , eine Auswahl mit NOLOCK
wird schneller abgeschlossen als eine normale Auswahl.
2) Ja , eine Auswahl mit NOLOCK
ermöglicht es anderen Abfragen gegen die betroffene Tabelle, schneller abzuschließen als ein normaler Select.
Warum sollte das so sein?
NOLOCK
bedeutet in der Regel (je nach DB-Engine), dass Sie mir Ihre Daten geben, und es ist mir egal, in welchem Zustand sie sind, und Sie brauchen sie nicht festzuhalten, während Sie daraus lesen. Das ist gleichzeitig schneller, weniger ressourcenintensiv und sehr, sehr gefährlich.
Sie sollten gewarnt werden, niemals eine Aktualisierung von oder etwas Systemkritisches durchzuführen, oder wenn absolute Korrektheit erforderlich ist, Daten zu verwenden, die von einer NOLOCK
lesen. Es ist durchaus möglich, dass diese Daten Zeilen enthalten, die während der Ausführung der Abfrage gelöscht wurden oder die in anderen, noch nicht abgeschlossenen Sitzungen gelöscht wurden. Es ist möglich, dass diese Daten Zeilen enthalten, die teilweise aktualisiert worden sind. Es ist möglich, dass diese Daten Datensätze enthalten, die Fremdschlüssel-Beschränkungen verletzen. Es ist möglich, dass diese Daten Zeilen ausschließen, die der Tabelle hinzugefügt wurden, aber noch nicht bestätigt wurden.
Sie haben wirklich keine Möglichkeit, den Stand der Daten zu erfahren.
Wenn Sie versuchen, Dinge wie eine Zeilenzahl oder andere zusammenfassende Daten zu erhalten, bei denen eine gewisse Fehlerspanne akzeptabel ist, dann NOLOCK
ist eine gute Möglichkeit, die Leistung für diese Abfragen zu steigern und zu vermeiden, dass sie sich negativ auf die Datenbankleistung auswirken.
Verwenden Sie immer die NOLOCK
Hinweis mit großer Vorsicht zu behandeln und alle Daten, die er zurückgibt, verdächtig zu behandeln.
4 Stimmen
Diese SO y DBA sind die Antworten ein wenig klarer, was tatsächlich passiert.