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

Men*_*los 20 mysql

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

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

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

Alm*_* Do 22

  • 是的,它可以完成,但不能使用简单的语法CREATE TABLE t AS SELECT ...- 您需要在完整语句中指定表列,Sample:

    CREATE TABLE t (col1 INT(11), col2 INT(11)) 
    ENGINE=MEMORY 
    AS 
    SELECT * FROM another_t
    
    Run Code Online (Sandbox Code Playgroud)
  • 默认情况下,表的最大大小为16Mb,但可以使用max_heap_table_size服务器系统变量进行调整.但请注意,这个限制是每个引擎 - 不是每个表.即你所有的memory桌子都会分享它.要限制单个表的大小,您需要对会话值进行操作max_heap_table_size,例如

     mysql> SET max_heap_table_size = 24*1024*1024;
    
    Run Code Online (Sandbox Code Playgroud)

  • +1.我还记得读过如果达到`max_heap_table`那么表会被静默写入磁盘. (5认同)

Car*_*vin 8

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

CREATE TEMPORARY TABLE IF NOT EXISTS tmp ENGINE=MEMORY AS (
SELECT 'abc' As tomcat, 'def' As apache);
Run Code Online (Sandbox Code Playgroud)

或者这样:

CREATE TEMPORARY TABLE IF NOT EXISTS tmp ENGINE=MEMORY AS (
SELECT tomcat, apache From servers);
Run Code Online (Sandbox Code Playgroud)

请注意,第一个选项将创建两列作为varchar(3),同时第二个选项将导入原始表中的任何列信息,甚至是它们的注释.