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

Tamaño de fila demasiado grande (> 8126) ¿puedo simplemente cambiar InnoDB a MyISAM?

Sí, puede cambiar a MyISAM. Pero eso no es necesariamente una buena idea:

  • MyISAM no admite transacciones
  • Las tablas MyISAM a menudo necesitan REPAIR después de un accidente

Una tabla InnoDB puede manejar más de 8 KB por fila. ¿Aparentemente te encontraste con el problema al tener una docena o más de columnas TEXT/BLOB? Se almacenan como máximo 767 bytes de una columna en la parte principal de la fila; el resto se pone en un bloque separado.

Creo que uno ROW_FORMAT pondrá todas las columnas grandes en un bloque separado, dejando solo 20 bytes para señalarlo.

Otro enfoque para las filas anchas es hacer "particiones verticales". Es decir, cree otra tabla (o tablas) con una PRIMARY KEY coincidente y algunas de las grandes columnas. Es especialmente útil mover columnas escasamente pobladas a una tabla de este tipo, luego tener menos filas en esa tabla y usar LEFT JOIN para obtener los datos. Además, si tiene algunas columnas que rara vez necesita SELECT , entonces esos son buenos candidatos para moverse -- no JOIN necesario cuando no necesita esas columnas.