ホームページ > データベース > mysql チュートリアル > デッドロックを防ぎながら SQL Server で INSERT または UPDATE 操作を効率的に実行するにはどうすればよいですか?

デッドロックを防ぎながら SQL Server で INSERT または UPDATE 操作を効率的に実行するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-22 16:32:09
オリジナル
1047 人が閲覧しました

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

デッドロックを回避するための SQL Server での INSERT および UPDATE 操作の最適化

INSERT (KEY、datafield1、datafield2...) のようなテーブルに対する UPDATEMyTable の同時操作を管理するには、多くの場合、「ライブ クエリ」アプローチが必要になります。つまり、既存の行を更新するか、そうでない場合は新しい行を挿入します。存在する。 パフォーマンスとデータの整合性は最も重要な懸念事項です。

単純な「if 存在する場合」メソッドは非効率的であり、マルチスレッド環境では主キー違反が発生しやすくなります。 データの一貫性を保証し、デッドロックを防ぐには、トランザクションベースの戦略が優れています。

方法 1:

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
ログイン後にコピー

方法 2:

BEGIN TRANSACTION
      UPDATE table WITH (SERIALIZABLE) SET ...
      WHERE key = @key

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

COMMIT TRANSACTION
ログイン後にコピー

どちらの方法も SERIALIZABLE 分離レベルを利用してデッドロックを排除し、データの整合性を維持します。 これにより、特に複数のスレッドが INSERT または UPDATE 操作を同時に試行する場合に、最適なパフォーマンスが保証されます。 2 つの方法のどちらを選択するかは、特定のパフォーマンス特性とコーディング スタイルの好みによって決まる場合があります。

以上がデッドロックを防ぎながら SQL Server で INSERT または UPDATE 操作を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート