mysql - sirven - ¿Por qué el bloqueo a nivel de tabla es mejor que el bloqueo a nivel de fila para tablas grandes?
para que sirven los bloqueos en sql server (5)
Según el manual de MySQL :
Para tablas grandes, el bloqueo de tabla es a menudo mejor que el bloqueo de fila,
¿Por qué es esto? Supongo que el bloqueo a nivel de fila es mejor porque cuando se bloquea en una tabla más grande, se está bloqueando más datos.
El bloqueo de tablas permite que muchas sesiones lean de una tabla al mismo tiempo
Para lograr una velocidad de bloqueo muy alta, MySQL usa el bloqueo de tablas
"Supongo que el bloqueo a nivel de fila es mejor porque" [se bloquean menos datos].
Primero "mejor" está mal definido en esta página. Parece que mejor significa "más rápido".
El bloqueo a nivel de fila no puede (en general) ser más rápido debido a la contención de los bloqueos. Bloquear cada fila de un conjunto de resultados grande significa la posibilidad muy real de un conflicto con otra consulta de conjunto de resultados grande y una reversión.
En general, si necesita bloquear una gran cantidad de datos, 1 bloqueo en una mesa grande es más barato que un montón de filas o bloqueos de páginas.
Un bloqueo de nivel de tabla de fila es mejor para una tabla grande donde se están realizando modificaciones de datos importantes. Esto permite que el sistema compita con un solo bloqueo en la mesa en lugar de tener que lidiar con un millón de bloqueos (uno para cada fila).
El RDBMS escala automáticamente los niveles de bloqueo internamente.
desde el link (edición previa)
Más lento que los bloqueos de nivel de página o nivel de tabla cuando se utiliza en una gran parte de la tabla porque debe adquirir muchos más bloqueos
use un bloqueo de nivel de fila si solo está golpeando una fila o dos. Si su código golpea muchas filas o filas desconocidas, quédese con el bloqueo de tabla.
El bloqueo de fila necesita más memoria que el bloqueo de tabla o de página.
Tienes que adquirir muchos más bloqueos con bloqueo de fila, lo que gasta más recursos.
De http://www.devshed.com/c/a/MySQL/MySQL-Optimization-part-2/
Ventajas del bloqueo a nivel de fila:
- Menos conflictos de bloqueo al acceder a diferentes filas en muchos subprocesos.
- Menos cambios para los rollbacks.
- Hace posible bloquear una sola fila durante mucho tiempo.
Desventajas del bloqueo a nivel de fila:
- Toma más memoria que los bloqueos de nivel de página o de tabla.
- Es más lento que los bloqueos de nivel de página o nivel de tabla cuando se usa en una gran parte de la tabla porque debe adquirir muchos más bloqueos.
- Definitivamente es mucho peor que otros bloqueos si a menudo realiza operaciones de GRUPO POR en una gran parte de los datos o si a menudo debe escanear toda la tabla.
- Con los bloqueos de nivel superior, también puede admitir más fácilmente bloqueos de diferentes tipos para ajustar la aplicación, ya que la sobrecarga del bloqueo es menor que para los bloqueos de nivel de fila.
Los bloqueos de tabla son superiores a los bloqueos de nivel de página o de fila en los siguientes casos:
- La mayoría de las declaraciones para la tabla son lecturas.
- Lea y actualice las claves estrictas, donde actualiza o elimina una fila que se puede recuperar con una sola clave:
UPDATE tbl_name SET column=value WHERE unique_key_col=key_value;
DELETE FROM tbl_name WHERE unique_key_col=key_value;
- SELECT combinado con sentencias INSERT concurrentes, y muy pocas sentencias UPDATE y DELETE.
- Muchas exploraciones o operaciones de GRUPO POR en la tabla completa sin escritores.