[+/-]
MyISAM
es el motor de almacenamiento por
defecto. Se basa en el código ISAM
pero tiene
muchas extensiones útiles. (Tenga en cuenta que MySQL 5.0 no
soporta ISAM
.)
Cada tabla MyISAM
se almacena en disco en tres
ficheros. Los ficheros tienen nombres que comienzan con el nombre
de tabla y tienen una extensión para indicar el tipo de fichero.
Un fichero .frm
almacena la definición de
tabla. El fichero de datos tiene una extensión
.MYD
(MYData
) . El fichero
índice tiene una extensión .MYI
(MYIndex
) .
Para especificar explícitamente que quiere una tabla
MyISAM
, indíquelo con una opción
ENGINE
:
CREATE TABLE t (i INT) ENGINE = MYISAM;
(Nota: Antiguas versiones de
MySQL usaban TYPE
en lugar de
ENGINE
(por ejemplo: TYPE =
MYISAM
). MySQL 5.0 soporta esta sintaxis para
compatibilidad con versiones anteriores pero
TYPE
está obsoleto y ahora se usa
ENGINE
.)
Normalmente, la opción ENGINE
no es necesaria;
MyISAM
es el motor de almacenamiento por
defecto a no ser que se cambie.
Puede chequear o reparar tablas MyISAM
con la
utilidad myisamchk . Consulte
Sección 5.8.3.7, “Usar myisamchk para recuperación de desastres”. Puede comprimir tablas
MyISAM
con myisampack para
que ocupen mucho menos espacio. Consulte
Sección 8.2, “myisampack, el generador de tablas comprimidas de
sólo lectura de MySQL”.
Las siguientes son algunas características del motor de
almacenamiento MyISAM
:
Todos los datos se almacenan con el byte menor primero. Esto hace que sean independientes de la máquina y el sistema operativo. El único requerimiento para portabilidad binaria es que la máquina use enteros con signo en complemento a dos (como todas las máquinas en los últimos 20 años) y formato en coma flotante IEEE (también dominante en todas las máquinas). La única área de máquinas que pueden no soportar compatibilidad binaria son sistemas empotrados, que a veces tienen procesadores peculiares.
No hay penalización de velocidad al almacenar el byte menor primero; los bytes en un registro de tabla normalmente no están alineados y no es un problema leer un byte no alineado en orden normal o inverso. Además, el código en el servidor que escoge los valroes de las columnas no es crítico respecto a otro código en cuanto a velocidad.
Ficheros grandes (hasta longitud de 63 bits) se soportan en sistemas de ficheros y sistemas operativos que soportan ficheros grandes.
Registros de tamaño dinámico se fragmentan mucho menos cuando se mezclan borrados con actualizaciones e inserciones. Esto se hace combinando automáticamente bloques borrados adyacentes y extendiendo bloques si el siguiente bloque se borra.
El máximo número de índices por tabla
MyISAM
en MySQL 5.0 es 64. Esto puede
cambiarse recompliando. El máximo número de columnas por
índice es 16.
La longitud máxima de clave es 1000 bytes. Esto puede cambiarse recompilando. En caso de clave mayor a 250 bytes, se usa un tamaño de bloque mayor, de 1024 bytes.
Las columnas BLOB
y TEXT
pueden indexarse.
Valores NULL
se permiten en columnas
indexadas. Esto ocupa 0-1 bytes por clave.
Todos los valores de clave numérico se almacenan con el byte mayor primero para mejor compresión de índice.
Cuando se insertan registros en orden (como al usar columnas
AUTO_INCREMENT
), el árbol índice se
divide de forma que el nodo mayor sólo contenga una clave.
Esto mejora la utilización de espacio en el árbol índice.
El tratamiento interno de una columna
AUTO_INCREMENT
por tabla.
MyISAM
actualiza automáticamente esta
colunmna para operaciones INSERT
y
UPDATE
. Esto hace las columnas
AUTO_INCREMENT
más rápidas (al menos
10%). Los valores iniciales de la secuencia no se reúsan tras
ser borrados. (Cuando una columna
AUTO_INCREMENT
se define como la última
columna de un índice de varias columnas, se reúsan los
valores borrados iniciales de la secuencia.) El valor
AUTO_INCREMENT
puede cambiarse con
ALTER TABLE
o myisamchk.
Si una tabla no tiene bloques libres en medio del fichero de
datos, puede INSERT
nuevos registros a la
vez que otros flujos leen de la tabla. (Esto se conoce como
inserciones concurrentes.) Un bloque libre puede ser resultado
de borrar o actualziar registros de longitud dinámica con
más datos que su contenido. Cuando todos los bloques libres
se usan (se rellenan), las inserciones futuras vuelven a ser
concurrentes.
Puede tener el fichero de datos e índice en directorios
distintos para obtener más velocidad con las opciones
DATA DIRECTORY
y INDEX
DIRECTORY
para CREATE TABLE
.
Consulte Sección 13.1.5, “Sintaxis de CREATE TABLE
”.
Cada columna de carácteres puede tener distintos conjuntos de carácteres. Consulte Capítulo 10, Soporte de conjuntos de caracteres.
Hay un flag en el fichero índice MyISAM
que indica si la tabla se ha cerrado correctamente. Si
mysqld se arranca con la opción
--myisam-recover
, Las tablas
MyISAM
se chequean automáticamente al
abrirse, y se reparan si la tabla no se cierra correctamente.
myisamchk marca las tablas como chequeadas
si se ejecuta con la opción --update-state
. myisamchk --fast cheque sólo las tablas
que no tienen esta marca.
myisamchk --analyze almacena estadísticas para partes de las claves, así como para las claves enteras.
myisampack puede comprimir columnas
BLOB
y VARCHAR
.
MyISAM
soporta las siguientes características:
Soporte de un tipo VARCHAR
auténtico; una
columna VARCHAR
comienza con la longitud
almacenada en dos bytes.
Tablas con VARCHAR
pueden tener longitud de
registro fija o dinámica.
VARCHAR
y CHAR
pueden
ser de hasta 64KB.
Un índice hash puede usarse para UNIQUE
.
Esto le permite tener UNIQUE
o cualquier
combinación de columnas en una tabla . (Sin embargo, no puede
buscar en un índice UNIQUE
.)
É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.