Frage

Ich habe Entwickler in der Abfrage mit (Nolock) verwendet, gibt es einen Nachteil? Wie hoch ist die Standardausführung der Abfrage? Meine Datenbank hat keinen Index.

Gibt es eine andere Möglichkeit, die Datenbank auszuwählen auszuwählen?

War es hilfreich?

Lösung

Das gemeinsame Missverständnis mit Nolock ist, dass die Datenbank während der Ausführung keine Sperren in die Datenbank legt. Technisch sieht es eine Schema-Stabilitäts-Schloss (SCH-S) aus, sodass sich der Teil des Schlosses auf die Datenseite der Abfrage bezieht.

Meistens, als ich das sehe, ist es eine vorzeitige Optimierung eines Entwicklers, weil sie gehört haben, dass sie die Abfrage schneller macht.

Es sei denn, Sie haben Beweise und Gültigkeit bei der Annahme einer schmutzigen Lektüre instrumentiert (und möglicherweise dieselbe Zeile zweimal lesen), sollte sie nicht verwendet werden - es sollte auf jeden Fall nicht der Standardansatz für Abfragen sein, sondern eine Ausnahme von der Regel, wenn sie gezeigt werden kann dass es erforderlich ist.

Andere Tipps

Es gibt zahlreiche Artikel darüber im Netz. Das Hauptrisiko ist das mit NOLOCK Sie können unkomplizierte Daten aus der Tabelle lesen (Dirty Reads). Siehe zum Beispiel, http://msdn.microsoft.com/en-us/library/aa259216(v=sql.80).aspx oder http://www.techrepublic.com/article/using-nolock-andpast-table-hints-in-sql-Server/6185492

NOLOCK Kann sehr nützlich sein, wenn Sie alte Daten aus einer häufig verwendeten Tabelle lesen. Betrachten Sie das folgende Beispiel,

Sie haben ein gespeichertes Verfahren, um auf Daten von inaktiven Projekten zuzugreifen. Sie möchten nicht, dass diese gespeicherte Prozedur die häufig verwendete Projekttabelle sperrt, während Sie alte Daten lesen.

NOLOCK ist auch nützlich, wenn schmutzige Lesevorgänge kein Problem sind und Daten nicht häufig geändert werden, wie in den folgenden Fällen.

Leseliste von Ländern, Währungen usw. aus einer Datenbank, die im Formular angezeigt wird. Hier bleibt die Daten unverändert und eine schmutzige Lektüre wird kein großes Problem verursachen, da sie sehr selten auftreten wird.

Beginnend mit SQL Server 2005 sind die Vorteile von Nolock aufgrund der Zeilenversionierung sehr gering.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top