Mise à jour MySQL à l'aide de CASE WHEN/THEN/ELSE
Problème :
Lors de la tentative de mettre à jour une grande table MyISAM à l'aide d'une instruction CASE WHEN/THEN/ELSE, la requête monopolise le CPU et prend un temps excessif pour terminer. De plus, il met à jour toutes les lignes du tableau, même celles non spécifiées dans la requête.
Explication :
La raison de ce comportement est que MySQL interprète l'instruction CASE comme mise à jour de toutes les lignes du tableau. Les lignes qui ne correspondent à aucune des conditions WHEN se voient attribuer une valeur NULL.
Solution :
Pour éviter ce problème, la requête doit être modifiée pour inclure un ELSE instruction qui attribue la valeur existante aux lignes qui ne correspondent à aucune des conditions WHEN. De plus, une clause WHERE peut être utilisée pour limiter la mise à jour aux seules lignes spécifiées.
La requête corrigée :
UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 ELSE `uid` END WHERE id IN (1, 2, 3);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!