[+/-]
MySQL almacena la información de su diccionario de datos de
tablas en ficheros .frm
dentro del directorio
de cada base de datos. Esto es así para todos los motores de
almacenamiento de MySQL, pero cada tabla InnoDB
también tiene su propia entrada en los diccionarios de datos
internos de InnoDB
dentro del espacio de
tablas. Cuando MySQL elimina una tabla o una base de datos,
también debe eliminar uno o más ficheros
.frm
, y las correspondientes entradas dentro
del diccionario de datos de InnoDB
. Esta es la
razón por la cual no se pueden mover tablas entre bases de datos
sencillamente moviendo los ficheros .frm
.
Cada tabla InnoDB
tiene un índice especial
llamado índice agrupado (clustered index) donde se almacenan los
datos de las filas. Si se define una PRIMARY
KEY
en una tabla, el índice de la clave primaria es el
índice agrupado.
Si no se define una PRIMARY KEY
para la tabla,
MySQL toma como clave primaria el primer índice
UNIQUE
que tenga solamente columnas
NOT NULL
, al cual InnoDB
utiliza como índice agrupado. Si no hay en la tabla un índice
con esas características, InnoDB
generará
internamente un índice agrupado donde las filas estarán
ordenadas por el identificador de fila (row ID) que
InnoDB
asigna a las columnas en tal tabla. El
identificador de fila es un campo de 6 bytes que se incrementa
automáticamente a medida que se agregan nuevas filas. Por lo
tanto, las filas ordenadas por este identificador están en el
orden físico de inserción.
El acceso a una fila a través del índice agrupado es rápido porque la fila de datos se encuentra en la misma página a donde el índice dirige su búsqueda. Si una tabla es grande, la arquitectura del índice agrupado a menudo ahorra operaciones de E/S en disco en comparación a la solución tradicional. (En muchos servidores de bases de datos, los datos se suelen almacenar en una página diferente que la entrada del índice).
En InnoDB
, las entradas en índices no
agrupados (también llamados índices secundarios) contienen el
valor de clave primaria de la fila. InnoDB
utiliza este valor de clave primaria para buscar la fila a partir
del índice agrupado. Nótese que si la clave primaria es larga,
los índices secundarios utilizan más espacio.
InnoDB
compara las cadenas
CHAR
y VARCHAR
de diferente
longitud como si el espacio sobrante en cadena la más corta
estuviera relleno con espacios.
É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.