sql >> Database >  >> RDS >> Mysql

Zijn tabellen gemaakt met CREATE TIJDELIJKE TABLE in het geheugen of op schijf?

Het hangt af van welke motor je specificeert. Standaard worden de tabelgegevens op schijf opgeslagen. Als u de MEMORY-engine specificeert, worden de gegevens alleen in het geheugen opgeslagen.

Het moet mogelijk zijn om de bestanden die in het bestandssysteem zijn gemaakt, daadwerkelijk te vinden wanneer de tijdelijke tabellen worden gemaakt. Na het uitvoeren van de volgende opdrachten:

CREATE TABLE test.table_myisam (x int) ENGINE=MyISAM;
CREATE TABLE test.table_memory (x int) ENGINE=MEMORY;
CREATE TEMPORARY TABLE test.temp_table_myisam (x int) ENGINE=MyISAM;
CREATE TEMPORARY TABLE test.temp_table_memory (x int) ENGINE=MEMORY;

Ik controleerde toen de directory:C:\ProgramData\MySQL\MySQL Server 5.5\data\test (op Windows) en de aanwezige bestanden waren:

table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.

De tijdelijke tabellen worden opgeslagen in C:\Windows\Temp en hebben ongebruikelijke namen, maar intern worden de gegevens op dezelfde manier opgeslagen.

#sql9a0_7_d.frm    # This is the MyISAM temporary table.
#sql9a0_7_d.MYD    # MyISAM data file for temporary table.
#sql9a0_7_d.MYI    # MyISAM index file for temporary table.

#sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.


  1. psql:FATAL:Peer-authenticatie mislukt voor gebruikersdev

  2. LINQ naar MySQL - wat is de beste optie?

  3. Hoe kan ik deze query herschrijven om de fout te vermijden:U kunt de doeltabel voor update niet specificeren in de FROM-clausule?

  4. Queryresultaten retourneren als een door komma's gescheiden lijst in SQL Server - STRING_AGG()