Não, o MySQL não armazena necessariamente cada tabela em um arquivo separado. A maneira como o MySQL armazena as tabelas depende do mecanismo de armazenamento usado.
Aqui está uma quebra de como os diferentes motores de armazenamento lidam com o armazenamento de tabela:
1. Innodb (mais comum - o padrão a partir do MySQL 5.5) *
`innodb_file_per_table` Configuração: Essa configuração determina como o InnoDB armazena dados e índices de tabela.
*
`innodb_file_per_table =on` (recomendado): Cada tabela possui seu próprio arquivo `.ibd` para dados e índices. Os metadados (definição da tabela) ainda estão armazenados no arquivo `ibdata1` compartilhado. Esta é a configuração preferida porque:
* Faz operações de tabela `soltada ',` truncate' e `otimizar a tabela 'mais rapidamente.
* Permite uma recuperação mais fácil de tabelas individuais.
* Reduz o risco de corrupção que afeta várias tabelas.
* Recupera o espaço quando uma tabela é descartada (ao contrário da abordagem de espaço de tabela compartilhada).
*
`innodb_file_per_table =off` (não recomendado): Dados e índices para todas as tabelas Innodb são armazenados em um espaço de tabela compartilhado (normalmente `ibdata1`). Os metadados (definição da tabela) ainda estão armazenados no arquivo `ibdata1` compartilhado. Essa configuração é fortemente desencorajada, a menos que você tenha uma razão muito específica e convincente para usá -la. É mais difícil gerenciar, recuperar e encolher o espaço de tabela.
*
`.frm` arquivos: O Innodb também cria um arquivo `.frm` para cada tabela. Este arquivo contém os metadados da tabela (definição da tabela). Este é um artefato histórico e os arquivos `.frm` estão se tornando menos importantes, pois os metadados estão sendo movidos para o dicionário de dados gerenciados diretamente pelo servidor.
2. Myisam (motor mais antigo, menos comum agora): * Myisam armazena cada tabela em três arquivos separados:
* `.frm`:definição de tabela (como innoDB).
* `.Myd`:arquivo de dados (contém os dados da tabela).
* `.Myi`:arquivo de índice (contém os índices da tabela).
3. Outros mecanismos de armazenamento: * Outros mecanismos de armazenamento (por exemplo, memória, arquivo, CSV) têm seus próprios mecanismos de armazenamento. Por exemplo, o mecanismo `Memory` armazena tabelas na memória, não no disco. Os `csv` motor armazenam dados em arquivos CSV.
Considerações importantes: *
Localização dos arquivos: Os arquivos associados a uma tabela (por exemplo, `.ibd`,` .frm`, `.myd`,` .myi`) são normalmente armazenados em um diretório que corresponde ao nome do banco de dados. A localização desses diretórios é determinada pela variável de configuração `datadir` na configuração do MySQL Server (geralmente` my.cnf` ou `my.ini`).
*
Espaço de tabela compartilhada (ibdata1): Se você estiver usando `innodb_file_per_table =off` com innodb, * todas as tabelas innodb compartilham o arquivo` ibdata1` (e possivelmente outros arquivos `ibdata` se ele crescer muito grande). Isso pode levar à fragmentação e dificultar a recuperação do espaço em disco.
*
Armazenamento de metadados: Embora os dados primários sejam frequentemente separados em arquivos diferentes (especialmente com `innodb_file_per_table =on`), as definições da tabela * * (metadados) são armazenadas em um dicionário de dados gerenciado pelo servidor. Os arquivos `.frm` são usados para formatos mais antigos e são menos críticos agora.
Como verificar `innodb_file_per_table`: Você pode verificar a configuração atual de `innodb_file_per_table` usando a seguinte consulta SQL:
`` `SQL
Mostrar variáveis como 'innodb_file_per_table';
`` `
em resumo: Enquanto mecanismos de armazenamento mais antigos, como o myisam * do * armazenam dados, índices e definições em arquivos separados, innodb (o mecanismo mais comum) com `innodb_file_per_table =em` armazena dados e índices em um` .ibd` arquivo * por tabela * (mais o arquivo `frm` .frm 'para metadata). Usando `innodb_file_per_table =off` armazena todos os dados da tabela e índices innodb no arquivo` ibdata1` compartilhado.