1、記憶體表,就是放在記憶體中的表,所使用記憶體的大小可通過My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,記憶體表與暫存資料表並不相同,暫存資料表也是存放在記憶體中,暫存資料表最大所需記憶體需要通過tmp_table_size = 128M設定。當資料超過暫存資料表的最大值設定時,自動轉為磁碟表,此時因需要進行IO操作,效能會大大下降,而記憶體表不會,
記憶體表滿後,會提示資料滿錯誤。
2、 暫存資料表和記憶體表都可以人工建立,但暫存資料表更多的作用是系統自己建立後,組織資料以提升效能,如子查詢,暫存資料表在多個串連之間不能共用。這裡只討論記憶體表。
建立記憶體表的方式:
create table test
(
id int unsigned not null auto_increment primary key,
state char(
10),
type char(
20),
date char(
30) )ENGINE=MEMORY DEFAULT CHARSET=utf8;
記憶體表的特性
·記憶體表的表定義是存放在磁碟上的,副檔名為.frm, 所以重啟不會丟失。
·記憶體表的資料是存放在記憶體中的,所以重啟會遺失資料。
·記憶體表使用一個固定的記錄長度格式。
·記憶體表不支援BLOB或TEXT列,比如varchar與text欄位就不會被支援。
·記憶體表支援AUTO_INCREMENT列和對可包含NULL值的列的索引(網上大多說不支援,這是錯誤的)。記憶體表支援大於(>) 小於( <)操作,網上也說不支援。
·mysql重啟後,主鍵、自增、索引仍然存在,只是資料丟失。這也是對網上的一些錯誤文字糾正。
·記憶體表表在所有用戶端之間共用(就像其它任何非TEMPORARY表)。 ·MEMORY儲存引擎執行HASH和BTREE索引。你可以通過添加一個如下所示的USING子句為給定的索引指定一個或另一個: