Mysql
 sql >> Base de données >  >> RDS >> Mysql

La définition de la valeur d'une colonne de toutes les lignes est très lente

Dans InnoDB, update les instructions verrouillent chaque ligne qu'elles parcourent. Cela signifie que pour mettre à jour vos 200 lignes, il doit créer 350 000 verrous au niveau de la ligne, tout en conservant un verrou d'annulation en même temps et en fournissant la valeur précédente à toutes les transactions qui lisent la valeur déjà modifiée (puisque la transaction n'est pas commis et la modification n'est pas définitive)

MyISAM, par contre, verrouille toute la table.

Donc, si vous avez besoin de mettre à jour toutes les lignes, verrouillez toute la table et vous obtiendrez de bien meilleures performances (vous n'aurez pas besoin des verrous au niveau des lignes)

Mais mieux encore, fournissez une clause WHERE, comme vous l'avez fait, et InnoDB n'acquerra des verrous que pour les lignes correspondantes (ainsi que des verrous d'espacement dans l'arborescence d'index, mais cela n'entre pas dans le cadre de la question)