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), а второй вариант будет импортировать любую информацию столбца из исходной таблицы, даже их комментарии.