Maison > base de données > tutoriel mysql > Pourquoi ma mise à jour MySQL CASE WHEN est-elle lente et affecte-t-elle toutes les lignes ?

Pourquoi ma mise à jour MySQL CASE WHEN est-elle lente et affecte-t-elle toutes les lignes ?

Susan Sarandon
Libérer: 2024-11-25 11:21:11
original
992 Les gens l'ont consulté

Why is My MySQL CASE WHEN Update Slow and Affecting All Rows?

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);
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal