Maison > base de données > tutoriel mysql > Comment effectuer efficacement des opérations INSERT ou UPDATE dans SQL Server tout en évitant les blocages ?

Comment effectuer efficacement des opérations INSERT ou UPDATE dans SQL Server tout en évitant les blocages ?

Mary-Kate Olsen
Libérer: 2025-01-22 16:32:09
original
1019 Les gens l'ont consulté

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

Optimisation des opérations INSERT et UPDATE dans SQL Server pour éviter les blocages

La gestion des opérations INSERT et UPDATE simultanées sur des tables comme MyTable (KEY, datafield1, datafield2...) nécessite souvent une approche de « requête en direct » – mettre à jour les lignes existantes ou en insérer de nouvelles si ce n'est pas le cas exister. Les performances et l'intégrité des données sont des préoccupations primordiales.

Une méthode naïve « si elle existe » est inefficace et sujette à des violations de clé primaire dans les environnements multithread. Pour garantir la cohérence des données et éviter les blocages, une stratégie basée sur les transactions est supérieure :

Méthode 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>
Copier après la connexion

Méthode 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>
Copier après la connexion

Les deux méthodes utilisent SERIALIZABLE le niveau d'isolement pour éliminer les blocages et maintenir l'intégrité des données. Cela garantit des performances optimales, en particulier lorsque plusieurs threads tentent simultanément des opérations INSERT ou UPDATE. Le choix entre les deux méthodes peut dépendre de caractéristiques de performances spécifiques et de préférences de style de codage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal