Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 11079|Antwort: 1

[Quelle] MSSQL MIT (NOLOCK) schmutzigem Lesen

[Link kopieren]
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ösung
Nächster:Problem gelöst, dass Fiddler lokale localhost, 127.0.0.1 Netzwerkanfragen, nicht crawlen konnte
Veröffentlicht am 05.04.2020, 14:21:36 |
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com