Aquí hay un desglose de cómo los diferentes motores de almacenamiento manejan el almacenamiento de la tabla:
1. Innodb (más común:el valor predeterminado a partir de MySQL 5.5)
* `innodb_file_per_table` Configuración: Esta configuración determina cómo innoDB almacena datos e índices de tabla.
* `innodb_file_per_table =on` (recomendado): Cada tabla tiene su propio archivo `.ibd` para datos e índices. Los metadatos (definición de la tabla) todavía se almacenan en el archivo compartido `ibdata1`. Esta es la configuración preferida porque:
* Hace que `Drop Table`, 'Truncate Table` y' Optimice la tabla 'operaciones más rápido.
* Permite una mayor recuperación de tablas individuales.
* Reduce el riesgo de corrupción que afecta a múltiples tablas.
* Reclama espacio cuando se cae una mesa (a diferencia del enfoque de espacio de tabla compartido).
* `innodb_file_per_table =off` (no recomendado): Los datos e índices para todas las tablas innoDB se almacenan en un espacio de tabla compartido (típicamente `ibdata1`). Los metadatos (definición de la tabla) todavía se almacenan en el archivo compartido `ibdata1`. Esta configuración se desaconseja muy a menos que tenga una razón muy específica y convincente para usarla. Es más difícil manejar, recuperarse y encoger el espacio de tabla.
* `.frm` archivos: InnoDB también crea un archivo `Frm` para cada tabla. Este archivo contiene los metadatos de la tabla (definición de la tabla). Este es un artefacto histórico y los archivos `.FRM` se están volviendo menos importantes a medida que los metadatos se trasladan al diccionario de datos administrado directamente por el servidor.
2. Myisam (motor más antiguo, menos común ahora):
* Myisam almacena cada tabla en tres archivos separados:
* `.frm`:definición de tabla (como innodb).
* `.Myd`:archivo de datos (contiene los datos de la tabla).
* `.Myi`:archivo de índice (contiene los índices de la tabla).
3. Otros motores de almacenamiento:
* Otros motores de almacenamiento (por ejemplo, memoria, archivo, CSV) tienen sus propios mecanismos de almacenamiento. Por ejemplo, el motor 'Memory` almacena tablas en la memoria, no en el disco. El motor `CSV` almacena datos en archivos CSV.
Consideraciones importantes:
* Ubicación de archivos: Los archivos asociados con una tabla (por ejemplo, `.ibd`,` .Frm`, `.myd`,` .myi`) se almacenan típicamente en un directorio que corresponde al nombre de la base de datos. La ubicación de estos directorios está determinada por la variable de configuración `DataDir` en la configuración de su servidor MySQL (generalmente` my.cnf` o `my.ini`).
* Espacio de tabla compartido (IBDATA1): Si está utilizando `innoDB_File_per_Table =Off` con innodb, * todas * las tablas innoDB comparten el archivo` ibdata1` (y posiblemente otros archivos `ibdata` si crece demasiado grande). Esto puede conducir a la fragmentación y dificultar la recuperación del espacio en el disco.
* Almacenamiento de metadatos: Aunque los datos primarios a menudo se separan en diferentes archivos (especialmente con `innodb_file_per_table =on`), las definiciones de la tabla * * (metadatos) se almacenan en un diccionario de datos administrado por el servidor. Los archivos `.FRM` se usan para formatos más antiguos y ahora son menos críticos.
Cómo verificar `innodb_file_per_table`:
Puede verificar la configuración actual de `innodb_file_per_table` usando la siguiente consulta SQL:
`` `SQL
Mostrar variables como 'innodb_file_per_table';
`` `` ``
En resumen:
Mientras que los motores de almacenamiento más antiguos como Myisam * do * almacenan datos de tabla, índices y definiciones en archivos separados, innoDB (el motor más común) con `innodb_file_per_table =on` almacena datos e índices en un archivo `ibd` por tabla * (más el archivo` .frm` más antiguo para metadatos). Usando `innodb_file_per_table =off` almacena todos los datos e índices de tabla innodb en el archivo compartido` ibdata1`.