MySQL的內存表(轉)


說明:MySQL內存表可以提升一些臨時業務的查詢,比如做Session的共享,一些類似緩存的數據等。

“內存表”顧名思義創建在內存中的表,真是這樣嗎?其實不然,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的主從服務器上,內存表可以被復制

 

參考:

https://www.cnblogs.com/sunss/archive/2011/03/16/1986050.html(以上內容轉自此篇文章)

http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM