CREATE TABLE as SELECT - 使用MEMORY ENGINE(在RAM内存中)

时间:2013-11-22 11:58:28

标签: mysql

我正在阅读使用MEMORY ENGINE的表格(存储在ram中的表格)。

  • 是否可以使用CREATE TABLE AS SELECT语法,但创建的表格为MEMORY ENGINE

  • MEMORY表的大小是否有限制?可以创建一个MEMORY表,它是一个pysical 1.5 GB表的副本吗?

2 个答案:

答案 0 :(得分:21)

  • 是的,可以完成,但不能使用简单的语法CREATE TABLE t AS SELECT ... - 您需要在full statement中指定表格列,示例:

    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;
    

答案 1 :(得分:8)

你也可以这样创建一个临时表:

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),同时第二个选项将导入原始表中的任何列信息,甚至是其注释。