我正在閱讀關於使用MEMORY ENGINE
(以ram存儲的表格)的表格。CREATE TABLE as SELECT - 使用MEMORY ENGINE(在RAM存儲器中)
是否有可能使用
CREATE TABLE AS SELECT
語法,但有創建的表我們MEMORY ENGINE
?是否對MEMORY表的大小有限制?可以創建一個MEMORY表,它是一個1.5 GB物理表的副本?
我正在閱讀關於使用MEMORY ENGINE
(以ram存儲的表格)的表格。CREATE TABLE as SELECT - 使用MEMORY ENGINE(在RAM存儲器中)
是否有可能使用CREATE TABLE AS SELECT
語法,但有創建的表我們MEMORY ENGINE
?
是否對MEMORY表的大小有限制?可以創建一個MEMORY表,它是一個1.5 GB物理表的副本?
是的,這是可以做到的,但不是簡單的語法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;
你也可以創建一個臨時表是這樣的:
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);
被建議,第一opti on將創建兩個列作爲varchar(3),同時第二個選項將從原始表中導入任何列信息,甚至他們的註釋。
+1。我還記得讀到,如果達到了'max_heap_table',表就會靜靜地寫入磁盤。 –
「實際的限制是由'tmp_table_size'和'max_heap_table_size'的值中較小者決定的,如果內存中的臨時表超過限制,MySQL會自動將其轉換爲磁盤上的MyISAM表。 ''tmp_table_size'(和'max_heap_table_size',如果需要的話),如果你做了很多高級的'GROUP BY'查詢並且你有很多的內存。「 來源:https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_tmp_table_size –