Nej, MySQL lagrar inte nödvändigtvis varje tabell i en separat fil. Hur MySQL -lagrar -tabeller beror på den använda lagringsmotorn.
Här är en uppdelning av hur olika lagringsmotorer hanterar tabelllagring:
1. InnoDB (vanligast - standard från MySQL 5.5)
* `innoDB_File_per_Table` Konfiguration: Den här inställningen bestämmer hur InnoDB lagrar tabelldata och index.
* `innodb_file_per_table =on` (rekommenderas): Varje tabell har sin egen ".IBD` -fil för data och index. Metadata (tabelldefinition) lagras fortfarande i den delade "ibdata1" -filen. Detta är den föredragna inställningen eftersom:
* Det gör `droppbord ',' trunkera tabell 'och' optimera tabell '-operationerna snabbare.
* Det möjliggör enklare återhämtning av enskilda tabeller.
* Det minskar risken för korruption som påverkar flera tabeller.
* Det återvinner utrymme när ett bord tappas (till skillnad från den delade tabellområdet).
* `innodb_file_per_table =off` (rekommenderas inte): Data och index för alla InnoDB -tabeller lagras i ett delat tabellområde (vanligtvis `ibdata1`). Metadata (tabelldefinition) lagras fortfarande i den delade "ibdata1" -filen. Den här inställningen är starkt avskräckt om du inte har ett mycket specifikt och övertygande skäl för att använda den. Det är svårare att hantera, återhämta sig och krympa tabellen.
* `.frm` filer: InnoDB skapar också en ".frm" -fil för varje tabell. Den här filen innehåller tabellens metadata (tabelldefinition). Detta är en historisk artefakt och ".frm" -filer blir mindre viktiga eftersom metadata flyttas in i datadboken som hanteras direkt av servern.
2. Myisam (äldre motor, mindre vanligt nu):
* Myisam lagrar varje tabell i tre separata filer:
* `.frm`:tabelldefinition (som InnoDB).
* `.MYD`:Datafil (innehåller tabellens data).
* `.Myi`:Indexfil (innehåller tabellens index).
3. Andra lagringsmotorer:
* Andra lagringsmotorer (t.ex. minne, arkiv, CSV) har sina egna lagringsmekanismer. Till exempel lagrar Motor -tabellerna "Memory" i minnet, inte på disken. Motorns CSV "lagrar data i CSV -filer.
Viktiga överväganden:
* Plats för filer: De filer som är associerade med en tabell (t.ex. `.ibd`,` .frm`, `.myd`, '.myi') lagras vanligtvis i en katalog som motsvarar databasnamnet. Platsen för dessa kataloger bestäms av "Datadir" -konfigurationsvariabeln i din MySQL -serverkonfiguration (vanligtvis "my.cnf` eller" my.ini ").
* delat tabellområde (ibdata1): Om du använder `innodb_file_per_table =off` med innoDB, * alla * innodb -tabeller delar filfilen 'ibdata1' (och eventuellt andra 'ibdata' -filer om det växer för stora). Detta kan leda till fragmentering och göra det svårt att återta diskutrymmet.
* metadata lagring: Även om de primära uppgifterna ofta separeras i olika filer (särskilt med `innoDB_File_per_Table =on '), lagras tabellen * definitioner * (metadata) i en dataordbok som hanteras av servern. `.frm` -filer används för äldre format och är mindre kritiska nu.
Hur man kontrollerar `innodb_file_per_table`:
Du kan kontrollera den aktuella inställningen för `innoDB_File_per_Table` med följande SQL -fråga:
`` `SQL
Visa variabler som 'InnoDB_File_per_Table';
`` `
Sammanfattningsvis:
Medan äldre lagringsmotorer som myisam * gör * lagra tabelldata, index och definitioner i separata filer, InnoDB (den vanligaste motorn) med `innodb_file_per_table =On` lagrar data och index i en '.ibd` -fil * per tabell * (plus den äldre` .frm` -filen för metadata). Använda `innodb_file_per_table =off` lagrar alla InnoDB -tabelldata och index i den delade` ibdata1` -filen.