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

Comprender la estructura de registro de MyISAM

La información que tiene en la pregunta sobre MyISAM es correcta. Sin embargo, me gustaría abordar sus dos preguntas adicionales:

ÚLTIMA PREGUNTA

Según el Libro

Capítulo 10:"Motores de almacenamiento" Página 196 El párrafo 7 dice

Según ese párrafo, el registro antiguo se sobrescribe con datos de vinculación solo si los nuevos datos que se van a insertar no caben en el bloque previamente asignado. Esto puede resultar en muchas filas infladas.

PREGUNTA ADICIONAL

De mi respuesta anterior, habría muchos bloques que tienen

  • bloque de espacio
  • la longitud del registro
  • la cantidad de bytes no utilizados en el bloque
  • Indicadores de indicador de valor NULL
  • posiblemente un puntero a la continuación del registro si el registro no encajaba en el espacio creado previamente y tuvo que dividirse

Dichos enlaces de registro comenzarían al frente de cada fila que tiene datos de gran tamaño que se insertan. Esto puede inflar las tablas MyISAM .MYD archivo muy rápidamente.

SUGERENCIAS

El formato de fila predeterminado de MyISAM es dinámico. Cuando una tabla es dinámica y experimenta muchas INSERCIONES, ACTUALIZACIONES y ELIMINACIONES, dicha tabla debería optimizarse con

OPTIMIZE TABLE mytable;

Existe una alternativa:cambie el formato de fila de la tabla a Fijo. De esa manera, todas las filas son del mismo tamaño. Así es como se hace el formato de fila Fijo:

ALTER TABLE mytable ROW_FORMAT=Fixed;

Incluso con un formato de fila fijo, se debe tomar tiempo para ubicar un registro disponible, pero el tiempo sería O (1) tiempo de búsqueda (en términos sencillos, se necesitaría la misma cantidad de tiempo para ubicar un registro disponible sin importar cuántas filas tiene la tabla o cuántas filas eliminadas hay). Puede omitir ese paso habilitando inserción_concurrente de la siguiente manera:

Agregue esto a my.cnf

[mysqld]
concurrent_insert = 2

No es necesario reiniciar MySQL. Solo corre

mysql> SET GLOBAL concurrent_insert = 2;

Esto haría que todos los INSERT fueran a la parte posterior de la mesa sin buscar espacio libre.

Ventaja de las tablas de filas fijas

  • INSERTAR, ACTUALIZAR y ELIMINAR sería un poco más rápido
  • SELECT son un 20-25 % más rápidos

Estas son algunas de mis publicaciones sobre SELECT que son más rápidos para los formatos de fila que se corrigen

Desventajas de las tablas de filas fijas

En la mayoría de los casos, cuando ejecuta ALTER TABLE mytable ROW_FORMAT=Fixed; , la mesa puede crecer 80-100%. El .MYI (páginas de índice para la tabla MyISAM) también crecería al mismo ritmo.

EPILOGO

Si desea velocidad para las tablas MyISAM y puede vivir con tablas más grandes, se necesitarían mis sugerencias alternativas. Si desea conservar espacio para cada tabla MyISAM, deje el formato de fila como está (Dinámico). Tendrás que comprimir la tabla con OPTIMIZE TABLE mytable; más frecuente con tablas dinámicas.