sql >> Base de Datos >  >> RDS >> Mysql

Establecer el valor de una columna de todas las filas es muy lento

En InnoDB, update Las declaraciones bloquean cada fila que escanean. Esto significa que para actualizar sus 200 filas, tiene que crear 350 000 bloqueos de nivel de fila, mientras mantiene un bloqueo de reversión al mismo tiempo y proporciona el valor anterior a cualquier transacción que esté leyendo el valor ya cambiado (dado que la transacción no es confirmado y el cambio no es definitivo)

MyISAM, por otro lado, bloquea toda la tabla.

Entonces, si necesita actualizar todas las filas, bloquee toda la tabla y obtendrá un rendimiento mucho mejor (no necesitará los bloqueos de nivel de fila)

Pero aún mejor, proporcione una cláusula WHERE, como lo hizo, e InnoDB adquirirá bloqueos solo para las filas coincidentes (así como algunos bloqueos de espacio en el árbol de índice, pero esto está fuera del alcance de la pregunta)