CREATE TABLE as SELECT - используя MEMORY ENGINE (в ОЗУ)
Я читал о таблицах, используя MEMORY ENGINE
(таблицы хранятся в памяти).
-
Можно ли использовать синтаксис CREATE TABLE AS SELECT
, но иметь созданную таблицу us MEMORY ENGINE
?
-
Существует ли ограничение на размер таблицы MEMORY? Может ли создать таблицу MEMORY, которая является копией таблицы размером в 1,5 ГБ?
Ответы
Ответ 1
-
Да, это можно сделать, но не с простым синтаксисом CREATE TABLE t AS SELECT ...
- вам нужно будет указать столбцы таблицы в полный оператор, Пример:
CREATE TABLE t (col1 INT(11), col2 INT(11))
ENGINE=MEMORY
AS
SELECT * FROM another_t
-
Максимальный размер таблицы по умолчанию, если 16Mb
, но его можно настроить с помощью max_heap_table_size
системной переменной сервера. Но, пожалуйста, обратите внимание, что этот предел для каждого двигателя - не для таблицы. То есть все ваши таблицы memory
будут делиться им. Чтобы ограничить размер отдельной таблицы, вам нужно будет использовать значение сеанса для max_heap_table_size
, например
mysql> SET max_heap_table_size = 24*1024*1024;
Ответ 2
вы также можете создать временную таблицу следующим образом:
CREATE TEMPORARY TABLE IF NOT EXISTS tmp ENGINE=MEMORY AS (
SELECT 'abc' As tomcat, 'def' As apache);
Или так:
CREATE TEMPORARY TABLE IF NOT EXISTS tmp ENGINE=MEMORY AS (
SELECT tomcat, apache From servers);
Обратите внимание, что первый вариант будет создавать два столбца как varchar (3), а второй вариант будет импортировать любую информацию столбца из исходной таблицы, даже их комментарии.