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.
