Таблицы создаются с помощью "создать временную таблицу" в памяти или на диске?

в MySql, когда вы создаете временную таблицу, например " создайте временную таблицу ...", эта таблица создана и хранится в памяти или на диске?

Я прочитал документы и Google и не придумал ответа.

2 ответов


Это зависит от того, какой двигатель вы укажете. По умолчанию данные таблицы будут храниться на диске. Если указать механизм памяти, данные будут храниться только в памяти.

Это должно быть возможным, чтобы найти файлы, которые создаются в файловой системе при создании временных таблиц. После выполнения следующих команд:

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;

затем я проверил каталог: C:\ProgramData\MySQL\MySQL сервер 5.5\data\test (в Windows) и присутствующие файлы были:

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.

временные таблицы хранятся в C:\Windows\Temp и имеют необычные имена, но внутренне данные хранятся точно так же.

#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.

Как сказал Марк, это зависит от того, какой двигатель вы говорите это использовать. Если вы не даете движок, он будет делать "что-то", но не обязательно держать его только в памяти. Если вы хотите заставить таблицу в памяти, вы должны явно определить ее:

CREATE TEMPORARY TABLE foobar (id int) ENGINE=MEMORY;

однако использование движка памяти ограничено. Для получения дополнительной информации посмотрите наhttp://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html .