|
|
Veröffentlicht am 03.04.2020, 10:06:04
|
|
|

Nachteile:
1. Es wird schmutzige Lektüre erzeugen
2. Gilt nur für ausgewählte Abfrageaussagen
Vorteile:
1. Einige Dateien sagen, dass die SQL-Abfrageeffizienz mit WITH (NOLOCK) um 33 % erhöht werden kann.
2. Kann für innere Join-Anweisungen verwendet werden
Dirty read: Ein Benutzer nimmt eine Änderung an einer Ressource vor, und ein anderer Benutzer liest zufällig den modifizierten Datensatz, dann gibt der erste Benutzer die Änderung auf und die Daten kehren zur vorherigen Modifikation zurück; diese beiden unterschiedlichen Ergebnisse sind Dirty Reading.
Details:
Um die Leistung von SQL-Abfragen generell zu verbessern, ist die erste Überlegung, einen Index zu erstellen. Tatsächlich kann neben der Einrichtung von Indizes auch das Hinzufügen eines Abschnitts WITH (NOLOCK) zur Syntax beim Setzen von SQL-Befehlen das Phänomen verbessern, dass Datensätze in einer Umgebung mit vielen Online-Abfragen LOCKED werden und somit die Abfrageleistung verbessern.
Allerdings sollte man beachten, dass SQL SELECT mit (NOLOCK) Dirty Read verursachen kann.
Zum Beispiel:
Zusätzlich zum einfachen SELECT kannst du auch die SELECT-Syntax mit JOIN verwenden. Aber DELETE, INSERT, UPDATE und andere Befehle, die Transaktionen erfordern, sind nicht gut...
Einige Dateien besagen, dass die SQL-Abfrageeffizienz mit WITH (NOLOCK) um 33 % gesteigert werden kann. Das Hinzufügen von WITH (NOLOCK) signalisiert SQL Server, dass unser SELECT-Befehl den Transaktionssperrezustand der aktuellen Tabelle nicht berücksichtigen muss, sodass die Leistung deutlich verbessert wird und das Sperrphänomen des Datenbanksystems deutlich reduziert wird (einschließlich Deadlock).
Eine Sache, die man beachten sollte, ist, dass WITH (NOLOCK) die Transaktionssperre der aktuellen Tabelle nicht berücksichtigt, sodass bei Daten in mehreren Phasen (z. B. Transaktionen über mehrere Tabellen – >z. B. Auszahlungssysteme) WITH (NOLOCK) die Daten ignoriert, die den Transaktionsprozess gerade verarbeiten...
Um es klar zu sagen: Wenn NoLock verwendet wird, kann man Daten lesen, die zwar geändert wurden, aber die Transaktion noch nicht abgeschlossen ist. Daher sollten Sie, wenn Sie die Echtzeitintegrität von Transaktionsdaten berücksichtigen müssen, sorgfältig über die Verwendung von WITH (NOLOCK) nachdenken.
Wenn Sie keine Transaktionen berücksichtigen müssen, könnte WITH (NOLOCK) eine nützliche Referenz sein.
Anmerkung 1: MIT ( < table_hint > ) Spezifiziert den Tabellenscan, einen oder mehrere vom Abfrageoptimierer verwendeten Indizes, Oder vom Abfrageoptimierer, um diese Datentabelle zu nutzen und den Sperrmodus für diese Anweisung zu verwenden.
Hinweis 2: WITH (NOLOCK) entspricht READ UNCOMMITTED
|
Vorhergehend:Datenbank-Master-Slave-Latenz führt zu ungenauer AbfragelösungNächster:Problem gelöst, dass Fiddler lokale localhost, 127.0.0.1 Netzwerkanfragen, nicht crawlen konnte
|