Mise à jour des tables MySQL MyISAM à l'aide de CASE WHEN/THEN/ELSE
Q : Lorsque vous tentez de mettre à jour des lignes spécifiques dans une grande table MyISAM à l'aide d'un CASE, la requête consomme trop de CPU et met à jour toutes les lignes, y compris celles non spécifiées. Que peut-on faire pour limiter la mise à jour aux lignes prévues ?
R : Le problème survient lorsque l'instruction CASE n'inclut pas de clause ELSE. Par défaut, les lignes non explicitement mentionnées dans l'instruction CASE se voient attribuer des valeurs NULL. Cela entraîne des mises à jour inutiles sur l'ensemble de la table.
Pour résoudre ce problème, ajoutez une clause ELSE à l'instruction CASE, en lui attribuant la valeur existante de la colonne uid. Cela empêchera la mise à jour d'affecter les lignes non spécifiées dans les clauses WHEN.
De plus, incluez une clause WHERE pour spécifier explicitement les lignes qui doivent être mises à jour. Cela garantit que seules les lignes souhaitées sont ciblées.
Exemple :
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!