Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Auswirkung des NOLOCK-Hinweises in SELECT-Anweisungen

1) Ja , eine Auswahl mit NOLOCK wird schneller abgeschlossen als eine normale Auswahl.

2) Ja , eine Auswahl mit NOLOCK wird andere Abfragen für die betroffene Tabelle schneller abschließen als eine normale Auswahl.

Warum sollte das so sein?

NOLOCK normalerweise (abhängig von Ihrer DB-Engine) bedeutet, dass Sie mir Ihre Daten geben, und es ist mir egal, in welchem ​​​​Zustand sie sich befinden, und ich mache mir nicht die Mühe, sie still zu halten, während Sie daraus lesen. Es ist auf einmal schneller, weniger ressourcenintensiv und sehr, sehr gefährlich.

Sie sollten gewarnt werden, niemals ein Update von oder etwas Systemkritisches durchzuführen, oder wo absolute Korrektheit erforderlich ist, indem Sie Daten verwenden, die von einem NOLOCK stammen 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 Sitzungen gelöscht wurden, die noch abgeschlossen werden müssen. Es ist möglich, dass diese Daten teilweise aktualisierte Zeilen enthalten. Es ist möglich, dass diese Daten Datensätze enthalten, die Fremdschlüsseleinschränkungen verletzen. Es ist möglich, dass diese Daten Zeilen ausschließen, die der Tabelle hinzugefügt wurden, aber noch festgeschrieben werden müssen.

Sie haben wirklich keine Möglichkeit zu wissen, wie der Status der Daten ist.

Wenn Sie versuchen, Dinge wie eine Zeilenanzahl oder andere zusammenfassende Daten zu erhalten, bei denen ein gewisser Fehlerspielraum 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 den NOLOCK weisen Sie mit großer Vorsicht darauf hin und behandeln Sie alle zurückgegebenen Daten misstrauisch.