“記憶體表”顧名思義建立在記憶體中的表,真是這樣嗎?其實不然,MySQL的記憶體表,表結構建立在磁碟上,資料存放在記憶體中,所以當MySQL啟動著的時候,這個表是存在的,資料也是存在的,如果使用者有查看這個表的許可權,在所有會話裡面,都可以訪問這個記憶體表的資料;當MySQL重啟後,資料消失,結構還存在。
記憶體表的建立:
CREATE TABLE test(
id int(10),
num int(10)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
查看是否建立成功:
show tables;
使用完記憶體表後,如果我們想釋放掉佔用掉的記憶體,可以有兩種方法:
-- 刪除資料
delete from test;
或者
-- 清空表
truncate table test;
再或者
-- 刪除表
drop table test;
對於我們常用的功能來說,記憶體有以下特徵:
1.對於varchar等變長類型,記憶體表使用固定的長度來存放;
2.記憶體表可以有非唯一鍵;
3.記憶體表不能包含BLOB或者TEXT列;
4.記憶體表支援AUTO_INCREMENT列;
5.記憶體表支援插入延遲,使讀取優先;
6.非臨時記憶體表和其它非記憶體表一樣在所有用戶端直接共用;
我們使用記憶體表的時候,需要注意以下幾個方面:
1.伺服器記憶體足夠大;
2.我們建立的記憶體表和MySQL內部暫存資料表有所不同:
記憶體表的資料存放在記憶體中,而內部暫存資料表(我們的query語句產生的)在恰當的時候存放在記憶體中,當內部暫存資料表變得很大時,MySQL會自動地把它轉化為 在磁碟上儲存的表,而我們建立的記憶體表,卻不會自動轉換。
3.當我們單獨地delete from 某個記憶體表的時候,不會回收記憶體;只有當整個表被delete的時候,才會回收記憶體;
4.在MySQL的主從伺服器上,記憶體表可以被複製
參考資料:
http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html