IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Performance ON DUPLICATE KEY


Sujet :

MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut Performance ON DUPLICATE KEY
    Bonjour,

    J'ai besoin, sous forme de batch de nuit exécuté 1 à 2 fois par semaine, de créer ou mettre à jour une grande quantité d'information : 1 à 10 millions de lignes.

    j'ai donc pensé à INSERT......ON DUPLICATE KEY ..

    Mais on m'a alerté sur le fait que le ON DUPLICATE KEY est très gourmand.
    Je vous demande donc votre retour d'expérience sur la solution la mieux adapté sachant que j'aurai à priori plus d'UPDATE que d'INSERT lors de chaque mise à jour :

    SOIT : INSERT......ON DUPLICATE KEY .. ?

    SOIT : UPDATE ...
    puis je teste si aucune ligne n'a été mis à jour (mysql_affected_rows() =0) ALORS je fais une INSERT

    D'avance merci

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut saluts92.

    Que faire si vous devez choisir entre :
    --> (1) faire un insert quand la ligne n'existe pas
    --> (2) faire un update quand la ligne existe déjà

    Il y a le traditionnel test, qui consiste à vérifier en premier l'existence de la ligne.
    Si la ligne n'existe pas faire (1) un insert, sinon faire (2) un update.
    C'est lourd à mettre en place alors que MySql sait le faire mieux que vous.

    La solution consiste à utiliser le replace.
    --> http://dev.mysql.com/doc/refman/5.7/en/replace.html

    Mais comment fonctionne ce replace ?
    Il fonctionne comme un insert, sauf que si la ligne existe déjà, il détruit l'ancienne ligne avant de venir insérer la nouvelle.

    Et quel est la différence avec un on duplicate key ?
    --> http://dev.mysql.com/doc/refman/5.7/...duplicate.html
    Et bien au lieu de détruire l'ancienne ligne, il vient simplement la mettre à jour.

    Donc pour résoudre votre problème, le mieux est de faire le test entre ces deux formes d'écritures afin de comparer avec un jeu d'essai représentatif, la solution qui sera la plus performante.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut évitez les i/o inutiles
    Bonjour,

    Le choix de la solution dépend aussi de la fréquence des cas :
    S'il y a de fortes chances que votre ligne existe déjà, il est préférable de tenter l'update en 1er
    Si au contraire, le cas le plus fréquent est l'ajout, alors privilégiez l'insert
    Ceci afin d'éviter les I/O inutiles

    Cela dit, il existe souvent des normes internes à l'entreprise sur ce point, à vous de vérifier ce qu'il en sur le site où vous intervenez.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] erreur 1061 duplicate key name
    Par porco dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/01/2007, 12h52
  2. on duplicate key avec un select au lieu d'update ?
    Par pony dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/10/2006, 15h05
  3. Erreur Duplicate key name
    Par snipes dans le forum Requêtes
    Réponses: 15
    Dernier message: 13/04/2006, 15h55
  4. [SQL SERVER duplicate key]
    Par snetechen dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/01/2006, 10h20
  5. INSERT ... ON DUPLICATE KEY UPDATE
    Par luffy san dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/10/2005, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo