我正在阅读使用MEMORY ENGINE
的表格(存储在ram中的表格)。
是否可以使用CREATE TABLE AS SELECT
语法,但创建的表格为MEMORY ENGINE
?
MEMORY表的大小是否有限制?可以创建一个MEMORY表,它是一个pysical 1.5 GB表的副本吗?
答案 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),同时第二个选项将导入原始表中的任何列信息,甚至是其注释。