Таблицы, созданные с помощью CREATE TEMPORARY TABLE, находятся в памяти или на диске? - PullRequest
22 голосов
/ 27 сентября 2011

В MySQL , когда вы создаете временную таблицу, например, CREATE TEMPORARY TABLE ..., эта таблица создается и хранится в памяти или на диске?

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

Ответы [ 2 ]

27 голосов
/ 27 сентября 2011

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

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

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 Server 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.
4 голосов
/ 27 сентября 2011

Как сказал Марк, это зависит от того, какой ДВИГАТЕЛЬ вы скажете ему использовать.Если вы не дадите ДВИГАТЕЛЬ, он сделает «что-то», но не обязательно сохранит это только в памяти.Если вы хотите, чтобы таблица была в памяти, вы должны определить ее явно:

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

Однако использование MEMORY-engine ограничено.Для получения дополнительной информации взгляните на Использование внутренних временных таблиц в MySQL .

...