Bonjour à tous,
Je me suis confronté récemment à un petit problème. En fait, j'aimerais trouver le moyen de mettre à jour certaines colonnes d'une table mais les valeurs que je veux y insérer sont (quasiment) toutes différentes, et ce sur toutes les lignes. Prenons par exemple la table
____________
| A | B | C | D |
|¯¯¯¯¯¯¯¯¯¯¯¯|
|----------------|
|----------------|
|____________|
gros talent en ASCII art
Bien, maintenant supposons que ma table soit composée d'environs 10.000 lignes, et que pour chaque lignes, je souhaite mettre à jour la colonne B et C avec à chaque fois des valeurs bien distinctes pour chaque colonne. J'ai tenté plusieurs manières
- UPDATE ... CASE WHEN ..., mais je trouve cette méthode trop fragile pour la problématique, sachant que le problème sous jacent est lié à la longueur de la requête
- d'itérer dessus avec JDBC (je code en java) et pour chaque ligne d'utiliser la méthode updateString() puis updateRow() du curseur, mais c'est trop long
- d'utiliser un update par lot, mais c'est aussi trop long
Avec des résultats très négatifs (environ 110 secondes) ce qui n'est pas tolérable vis à vis du besoin client (et ce qui est compréhensible).
J'aimerais trouver la solution optimale à mon problème. Un ami m'a parlé de plusieurs méthodes, comme faire une copie de la table et tout charger dans la table d'origine à la fin, mais je ne vois pas en quoi ça m'aiderait car si je charge ma table d'origine dans une autre table je devrais quand même faire des updates dans cette table temporaire... ou alors d'utiliser un INSERT INTO [table](x, y, z, ...) VALUES(...) ON DUPLICATE KEY UPDATE (...). Je ne sais pas ce que cette méthode va donner mais c'est mon dernier recours je pense, à moins que vous ayiez une meilleure idée?
D'avance merci pour vos réponses, et je vous souhaite une bonne soirée !
Partager