Maison >base de données >tutoriel mysql >Comment effectuer efficacement des opérations INSERT ou UPDATE dans SQL Server tout en évitant les blocages ?
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>
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>
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!