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
May 03, 2012
:¿Cuál es más rápido, InnoDB o MiISAM?Sep 20, 2011
:Lo mejor de MyISAM e InnoDBMay 10, 2011
:¿Cuál es el impacto en el rendimiento de usar CHAR vs VARCHAR en un campo de tamaño fijo?
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.