Ist es sicher, MS-SQL-s MIT (NOLOCK) option für select-Anweisungen und insert-Anweisungen, wenn
Ist es sicher, MS-SQL-s MIT (NOLOCK) option für select-Anweisungen und insert-Anweisungen, wenn Sie nie eine Zeile ändern, aber nur, einfügen oder löschen von Zeilen?
I..e, tun Sie nie ein UPDATE auf eine der Zeilen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Fragen, ob oder nicht Sie erhalten Daten, die möglicherweise nicht mehr korrekt sein, dann kommt es auf Ihre Anfragen. Zum Beispiel, wenn Sie etwas tun, wie:
gleichzeitig, dass eine Zeile eingefügt wird mit einem Datum oder nach 2008-01-01 dann können Sie nicht bekommen, dass die neue Zeile. Dies kann auch Auswirkungen auf Abfragen, die Aggregate erzeugen.
Wenn Sie nur die Nachahmung von updates durch löschen/einfügen, dann werden Sie auch möglicherweise eine "alte" version der Daten.
Nicht im Allgemeinen. (D. H. AKTUALISIEREN, ist nicht die einzige Verriegelung Problem)
Wenn Sie das einfügen (oder löschen) Datensätze und wählen Sie könnte möglicherweise geben Sie Datensätze, die wäre in diesem Satz, dann ja, NOLOCK geben Sie ein dirty read, die möglicherweise oder möglicherweise nicht enthalten die Datensätze.
Wenn der Einfüge-oder Löschvorgänge würde nie potenziell ausgewählt werden (zum Beispiel die Daten Lesen ist immer von gestern-Daten, während die heutigen Daten kommen oder manipuliert, ist nie gelesen), dann ja, es ist "sicher".
Wenn Sie nie tun, keine UPDATEs, warum dann nicht sperren geben Sie ein problem in den ersten Platz?
Wenn es die referenzielle Integrität oder trigger-firing Fragen spielen, dann NOLOCK ist nur Los, um diese Fehler in mysteriöse Ungereimtheiten.
Gut 'sicher' ist ein sehr allgemeiner Begriff; es kommt auf den Kontext Ihrer Anwendung und Ihrer Nutzung. Aber es gibt immer eine chance-skipping und double-counting früher begangen Zeilen, wenn NOLOCK-Hinweis verwendet wird.
Sowieso, haben, Lesen Sie dieses:
http://blogs.msdn.com/b/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is-used.aspx
Nicht sicher, wie Sie SELECT-Anweisungen in Konflikt geraten könnten, wenn Sie selbst die Beschränkung Fügt und Löscht. EINFÜGEN ist problematisch, denn es kann widersprochen haben Primärschlüssel eingefügt, während Ihre Abfrage, zum Beispiel. Beide Einsätze und Löscht beide setzen Sie auf die Bedingungen, ausgedrückt in Ihrer WHERE-Klausel, oder JOINs, etc. können ungültig werden, während Ihre Anweisung-Ausführung.