Heim >Datenbank >MySQL-Tutorial >Wie kann man INSERT- oder UPDATE-Vorgänge in SQL Server effizient durchführen und gleichzeitig Deadlocks verhindern?

Wie kann man INSERT- oder UPDATE-Vorgänge in SQL Server effizient durchführen und gleichzeitig Deadlocks verhindern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-22 16:32:091017Durchsuche

How to Efficiently Perform INSERT or UPDATE Operations in SQL Server While Preventing Deadlocks?

Optimierung von INSERT- und UPDATE-Vorgängen in SQL Server zur Vermeidung von Deadlocks

Das Verwalten gleichzeitiger INSERT- und UPDATE-Vorgänge für Tabellen wie MyTable (KEY, datafield1, datafield2...) erfordert häufig einen „Live-Abfrage“-Ansatz – das Aktualisieren vorhandener Zeilen oder das Einfügen neuer Zeilen, wenn dies nicht der Fall ist existieren. Leistung und Datenintegrität sind oberste Priorität.

Eine naive „Wenn vorhanden“-Methode ist ineffizient und anfällig für Primärschlüsselverletzungen in Multithread-Umgebungen. Um die Datenkonsistenz zu gewährleisten und Deadlocks zu verhindern, ist eine transaktionsbasierte Strategie besser:

Methode 1:

<code class="language-sql">BEGIN TRANSACTION
IF EXISTS (SELECT * FROM table WITH (UPDLOCK,SERIALIZABLE) WHERE key = @key)
BEGIN
      UPDATE table SET ...
      WHERE key = @key
END
ELSE
BEGIN
      INSERT INTO table (key, ...)
      VALUES (@key, ...)
END
COMMIT TRANSACTION</code>

Methode 2:

<code class="language-sql">BEGIN TRANSACTION
      UPDATE table WITH (SERIALIZABLE) SET ...
      WHERE key = @key

      IF @@ROWCOUNT = 0
      BEGIN
            INSERT INTO table (key, ...) VALUES (@key,...)
      END

COMMIT TRANSACTION</code>

Beide Methoden nutzen SERIALIZABLE die Isolationsstufe, um Deadlocks zu beseitigen und die Datenintegrität aufrechtzuerhalten. Dies gewährleistet eine optimale Leistung, insbesondere wenn mehrere Threads gleichzeitig INSERT- oder UPDATE-Vorgänge versuchen. Die Wahl zwischen den beiden Methoden kann von spezifischen Leistungsmerkmalen und Präferenzen für den Codierungsstil abhängen.

Das obige ist der detaillierte Inhalt vonWie kann man INSERT- oder UPDATE-Vorgänge in SQL Server effizient durchführen und gleichzeitig Deadlocks verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn