Nein, MySQL speichert nicht unbedingt jede Tabelle in einer separaten Datei. Die Art und Weise, wie MySQL Tabellen speichert, hängt von der verwendeten Speichermotor ab.
Hier finden Sie eine Aufschlüsselung, wie unterschiedliche Speichermotoren mit Tabellenspeicher umgehen:
1. InnoDB (am häufigsten - die Standardeinstellung ab MySQL 5.5)
* `innodb_file_per_table` Konfiguration: Diese Einstellung bestimmt, wie InnoDB die Tabellendaten und -indizes speichert.
* `innoDb_file_per_table =on` (empfohlen): Jede Tabelle verfügt über eine eigene ".ibd` -Datei für Daten und Indizes. Metadaten (Tabellendefinition) wird immer noch in der gemeinsam genutzten Datei "ibdata1`) gespeichert. Dies ist die bevorzugte Einstellung, weil:
* Es macht `Drop table`,` verkürzte Tabelle und "Optimize Table" -Operationen schneller.
* Es ermöglicht eine einfachere Wiederherstellung einzelner Tabellen.
* Es verringert das Korruptionsrisiko, das mehrere Tabellen betrifft.
* Es erholt Raum, wenn eine Tabelle fallen gelassen wird (im Gegensatz zum gemeinsam genutzten Tablespace -Ansatz).
* `innoDb_file_per_table =off` (nicht empfohlen): Daten und Indizes für alle InnoDB -Tabellen werden in einem gemeinsam genutzten Tablespace gespeichert (typischerweise `ibdata1`). Metadaten (Tabellendefinition) wird immer noch in der gemeinsam genutzten Datei "ibdata1`) gespeichert. Diese Einstellung ist stark entmutigt, es sei denn, Sie haben einen sehr spezifischen und überzeugenden Grund, sie zu verwenden. Es ist schwieriger, den Tablespace zu verwalten, zu erholen und zu verkleinern.
* `.frm` Dateien: InnoDB erstellt auch eine `.frm` -Datei für jede Tabelle. Diese Datei enthält die Metadaten der Tabelle (Tabellendefinition). Dies ist ein historisches Artefakt und ".Frm` -Dateien werden weniger wichtig, da Metadaten in das vom Server verwaltete Datenwörterbuch verwaltet werden.
2. MyiSam (älterer Motor, jetzt weniger verbreitet):
* MyISAM speichert jede Tabelle in drei separaten Dateien:
* `.frm`:Tabellendefinition (wie InnoDB).
* `.Myd`:Datendatei (enthält die Daten der Tabelle).
* `.Myi`:Indexdatei (enthält die Indizes der Tabelle).
3. Andere Speichermotoren:
* Andere Speichermotoren (z. B. Speicher, Archiv, CSV) haben ihre eigenen Speichermechanismen. Zum Beispiel speichert der "Speicher" -Motor Tabellen im Speicher, nicht auf der Festplatte. Das `CSV` Engine speichert Daten in CSV -Dateien.
Wichtige Überlegungen:
* Speicherort der Dateien: Die mit einer Tabelle zugeordneten Dateien (z. B. `.ibd`,` .frm`, `.myd`,` .myi`) werden typischerweise in einem Verzeichnis gespeichert, das dem Datenbanknamen entspricht. Der Ort dieser Verzeichnisse wird durch die Konfigurationsvariable "Datadir" in Ihrer MySQL -Serverkonfiguration (normalerweise `my.cnf` oder` my.ini`) bestimmt.
* Shared Tablespace (ibdata1): Wenn Sie `innoDB_File_per_table =Off` mit InnoDB verwenden, teilen Sie alle * InnoDB -Tabellen die Datei" ibdata1` Dies kann zu Fragmentierung führen und es schwierig machen, den Speicherplatz des Festplattens zurückzugewinnen.
* Metadatenspeicher: Obwohl die Primärdaten häufig in verschiedene Dateien unterteilt sind (insbesondere mit `innodb_file_per_table =on`), werden die Tabelle * Definitionen * (Metadaten) in einem vom Server verwalteten Datenwörterbuch gespeichert. `.frm` -Dateien werden für ältere Formate verwendet und sind jetzt weniger kritisch.
So überprüfen Sie `innoDB_file_per_table`:
Sie können die aktuelle Einstellung von `innodb_file_per_table" mit der folgenden SQL -Abfrage untersuchen:
`` `SQL
Variablen wie 'innodb_file_per_table' anzeigen;
`` `
Zusammenfassend:
Während ältere Speichermotoren wie MyISAM * TABLE -Daten, -indizes und Definitionen in separaten Dateien speichern, speichert InnoDB (die häufigste Engine) mit `innodb_file_per_table =on` Daten und Indizes in einer` .ibd` -Datei * pro Tabelle * (plus älterer `.frm` -Datei für Metadata). Verwenden Sie `innodb_file_per_table =off` speichert alle InnoDB -Tabellendaten und -Indexes in der freigegebenen Datei` ibdata1`.