2013-11-22 51 views

回答

16
  • 是的,這是可以做到的,但不是簡單的語法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; 
    
+4

+1。我還記得讀到,如果達到了'max_heap_table',表就會靜靜地寫入磁盤。 –

+1

「實際的限制是由'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 –

6

你也可以創建一個臨時表是這樣的:

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),同時第二個選項將從原始表中導入任何列信息,甚至他們的註釋。

相關問題