El formato de almacenamiento dinámico se usa si una tabla
MyISAM
contiene alguna columna de longitud
variable (VARCHAR
, BLOB
,
o TEXT
), o si la tabla se crea con la
opción ROW_FORMAT=DYNAMIC
.
Este formato es un poco más complejo ya que cada columna tiene una cabecera que indica la longitud. Un registro puede acabar en más de una localización cuando es alarga como resultado de una actualización.
Puede usar OPTIMIZE TABLE
o
myisamchk para defragmentar una tabla. Si
tiene columnas de longitud fija a las que accede o cambia
frecuentemente en una tabla que también contenga alguna
columna de longitud variable, puede ser buena idea mover las
columnas de longitud variable a otras tablas para evitar
fragmentación.
Características generales de tablas de formato dinámico:
Todas las columnas de cadenas de carácteres son dinámicas excepto aquéllas con longitud menor a cuatro.
Cada registro viene precedido por un bitmap que indica
qué columnas contienen la cadena vacía (para columnas de
cadenas) o cero (para columnas numéricas). Tenga en
cuenta que esto no incluye columnas que contienen valores
NULL
. Si una columna de cadena de
carácteres tiene una longitud de cero tras eliminar los
espacios en blanco finales, o una columna numérica tiene
un valor de cero, se marca en el bitmap y no se guarda en
disco. Las cadenas no vacías se guardan como un byte de
longitud más al de los contenidos de la cadena.
Para tablas de longitud fija normalmente se necesita mucho menos espacio de disco.
Cada registro usa sólo tanto espacio como necesita. Sin
embargo, si un registro crece, se divide en tantos trozos
como haga falta, resultando en una fragmentación de
registro. Por ejemplo, si actualiza un registro con
información que alarga la longitud del registro, el
registro se fragmenta. En este caso, puede que tenga que
ejecutar OPTIMIZE TABLE
o
myisamchk -r de vez en cuando para
mejorar el rendimiento. Use myisamchk
-ei para obtener estadísticas de tabla.
Más difícil de reconstruir tras un fallo que las tablas de formato estático, ya que los registros pueden fragmentarse en varios trozos y puede faltar algún enlace (fragmento).
La longitud de registro esperada para registros de longitud dinámica se calcula usando la siguiente expresión:
3 + (número de columnas
+ 7) / 8 + (número de columnas de carácteres
) + (tamaño comprimido de columnas de cadenas
) + (longitud de cadenas
) + (número de columnas NULL
+ 7) / 8
Hay una penalización de 6 bytes para cada enlace. Un registro dinámico se enlaza si una actualización provoca aumentar el tamaño de un registro. Cada nuevo enlace es al menos de 20 bytes, así que la siguiente ampliación probablemente irá en el mismo enlace. Si no es así, se crea otro enlace. Puede encontrar el número de enlaces usando myisamchk -ed. Pueden eliminarse todos los enlaces con myisamchk -r.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.