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
Linda Hamiltonoriginal
2025-01-21 22:27:13885parcourir

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 :

<code class="language-sql">INSERT INTO TheTable
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WHERE
        PrimaryKey = @primaryKey)</code>

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 :

<code class="language-sql">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)</code>

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 :

<code class="language-sql">BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH</code>

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:
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