Maison > base de données > tutoriel mysql > Comment les développeurs SQL peuvent-ils garantir l'insertion de lignes uniques sous une charge élevée ?

Comment les développeurs SQL peuvent-ils garantir l'insertion de lignes uniques sous une charge élevée ?

Linda Hamilton
Libérer: 2025-01-21 22:27:13
original
862 Les gens l'ont consulté

How Can SQL Developers Ensure Unique Row Insertion Under High Load?

Garantir des insertions de lignes uniques dans les bases de données SQL sous pression

Un défi courant pour les développeurs SQL consiste à insérer des lignes sans créer de doublons. La méthode traditionnelle implique souvent une sous-requête :

INSERT INTO TheTable
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WHERE
        PrimaryKey = @primaryKey)
Copier après la connexion

Sous forte charge, cependant, cette approche peut conduire à des violations de clé primaire, compromettant l'atomicité des instructions.

Pour atténuer cela, certains développeurs utilisent des mécanismes de verrouillage :

INSERT INTO TheTable
WITH
    (HOLDLOCK,
    UPDLOCK,
    ROWLOCK)
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WITH
        (HOLDLOCK,
        UPDLOCK,
        ROWLOCK)
    WHERE
        PrimaryKey = @primaryKey)
Copier après la connexion

Mais un verrouillage excessif a un impact significatif sur les performances.

Une stratégie plus efficace, souvent appelée méthode « JFDI » (Just F***ing Do It), implique une insertion directe avec gestion des erreurs :

BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH
Copier après la connexion

Cela évite les requêtes imbriquées et le verrouillage, favorisant ainsi la concurrence en cas de volume élevé.

Il est essentiel qu’une indexation appropriée soit primordiale. Comme l'a souligné un développeur SQL chevronné dans la « Leçon 4 », il n'est pas fiable de s'appuyer uniquement sur des sous-requêtes pour prévenir les doublons. Un index unique, associé à une gestion appropriée des erreurs (comme la détection de l'erreur 2627), assure une prévention automatique des doublons, rationalisant ainsi le processus.

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!

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