Bonjour,
J'aurai souhaité vos avis sur ma problématique.
J'ai une base de données Mysql 4.0 qui contient une table CLIENT (env. 800.000 lignes) de type innodb.
Chaque jour, je reçois un fichier descrivant des changements de contrat client que je dois integrer pour tenir ma bdd à jour.
Ce fichier de changements fait env. 100.000 lignes.
Si le client est dans ma base, 1 changement de contrat entraine deux requêtes au niveau de ma bdd :
- un update (mise a jour de contrat) ou un delete (resiliation),
- un insert (log de l'enregistrement du changement de contrat).
Par suite, et dans le cas ou les 100.000 lignes correspondraient au pire à des changements de contrat impactant 100.000 clients réellement dans ma
base (ce qui n'est pas forcement le cas), j'aurai :
- 100.000 select à faire pour vérifier que le client est dans ma base,
- le cas échéant, 200.000 requêtes (update ou delete + insert) à lancer sur le serveur MYSQL.
Par suite, plutot que de parcourrir le fichier avec un batch, de faire un select pour voir si le client existe dans ma base et ensuite faire l'opération
correspondante (= select + update ou delete + insert) si nécessaire, j'ai l'idée de créer un fichier contenant la totalité des commandes SQL (indépendamment du fait de savoir si le client existe bien chez moi), pour ensuite l'executer via "mysql .... < contrat.sql"
Pensez-vous que ce soit une bonne solution ?
Le fait de lancer un update sur une table qui retournerait "0 row(s) affected" est-il consomateur, est-il plus consomateur qu'un select ?
Merci de vos réponses !!
izioto
Partager