Bien utiliser la fonction MERGE mysql
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:
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