Bonjour,
Je poste ce message car je viens de découvrir la fonction MERGE en Sql qui pourrait m'être utile par contre j'avoue ne pas trop comprendre à 100% comment elle fonctionne.
Pour l'explication :
Je fais des insertions de masse dans une base de données (des produits) quotidiennement extrait de fichier XML. Ces données doivent soit être mises à jour si elles ne sont pas présentes dans la base, soit être insérées si celles-ci sont déjà présentes dans la base. Les produits possèdent un identifiant unique en autoincrement.
Mon code actuel n'est franchement pas optimisé et je cherche à l'améliorer au mieux pour consommer moins de mémoire et donc augmenter la vitesse de traitement.
Code actuel :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?php $select = mysql_query("SELECT element FROM table WHERE element='$numero_produit'"); $total = mysql_num_rows($select); // Cette opération peut être répétée 25 000 fois if($total==1) { // Je procède à la mise à jour via update } else { // Sinon je procède à l'insertion avec un insert } ?>
Le but souhaité avec Merge :
- Supprimer l'étape mysql_num_rows
- Gagner en temps et en mémoire.
Ce que j'ai compris de cette instruction :
Si la donnée a été trouvée dans la base grâce à son identifiant unique
WHEN MATCHED -> UPDATE
Sinon elle n'existe pas alors on l'insère
WHEN NOT MATCHED -> INSERT
Je comprend cette partie de l’instruction mais pas la première. Comment je pourrai mettre en place cette instruction ? C'est finalement la même que la première en PHP ci-dessus mais je pense gagner de la mémoire car au lieu d'avoir 3 instructions avec un appel php de mysql_num_rows j'en ai qu'une..
MERGE INTO produit USING (SELECT numero_produit FROM produit WHERE numero_produit='$numero_produit' )
WHEN MATCHED THEN UPDATE produit SET info1='$info1',info2='$info2' WHERE numero_produit='$numero_produit'
WHEN NOT MATCHED THEN INSERT INTO produit(numero_produit,info1,info2)
VALUES ('$numero_produit''$info1','$info2');
Merci d'avance pour toutes explications sur MERGE !! J'ai bien cherché mais j'avoue que je pédale un peu dans la choucroute...
Guillaume
Partager