J'essaie de mettre à jour une GRANDE table MyISAM (25 millions d'enregistrements) en utilisant un CLI script. La table n'est pas verrouillée/utilisée par autre chose.
Je me suis dit qu'au lieu d'effectuer des requêtes UPDATE uniques pour chaque enregistrement, je pourrais tout aussi bien utiliser la fonction CASE.
En id
est PRIMAIRE. Je pense que la requête suivante devrait prendre quelques millisecondes.
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
END
Et voilà que la requête monopolise le processeur et ne se termine pas avant une éternité.
Puis, à ma grande surprise, j'ai découvert que la requête mettait à jour les 25 millions de lignes, en plaçant un NULL sur les lignes que je n'avais pas spécifiées.
A quoi cela sert-il ? Puis-je simplement faire une mise à jour en masse sur des lignes spécifiques sans mettre à jour 25 millions de lignes à chaque fois que j'exécute cette requête ? Ou dois-je effectuer des mises à jour individuelles, puis effectuer un commit ?