mysql內存表heap使用總結

 

內存表使用哈希散列索引把數據保存在內存中,因此具有極快的速度,適合緩存中小型數據庫,但是使用上受到一些限制,以下是藍草使用的一些感受。

1、heap對所有用戶的連接是可見的,這使得它非常適合做緩存。

2、僅適合使用的場合。heap不允許使用xxxTEXT和xxxBLOB數據類型;只允許使用=和<=>操作符來搜索記錄(不允許<、>、<=或>=);不支持auto_increment;只允許對非空數據列進行索引(not null)。
注:操作符 “<=>” 說明:NULL-safe equal.這個操作符和“=”操作符執行相同的比較操作,不過在兩個操作碼均爲NULL時,其所得值爲1而不爲NULL,而當一個操作碼爲NULL時,其所得值爲0而不爲NULL。

3、一旦服務器重啓,所有heap表數據丟失,但是heap表結構仍然存在,因爲heap表結構是存放在實際數據庫路徑下的,不會自動刪除。重啓之後,heap將被清空,這時候對heap的查詢結果都是空的。

4、如果heap是複製的某數據表,則複製之後所有主鍵、索引、自增等格式將不復存在,需要重新添加主鍵和索引,如果需要的話。

5、對於重啓造成的數據丟失,有以下的解決辦法:
 a、在任何查詢之前,執行一次簡單的查詢,判斷heap表是否存在數據,如果不存在,則把數據重新寫入,或者DROP表重新複製某張表。這需要多做一次查詢。不過可以寫成include文件,在需要用該heap表的頁面隨時調用,比較方便。
 b、對於需要該heap表的頁面,在該頁面第一次且僅在第一次查詢該表時,對數據集結果進行判斷,如果結果爲空,則需要重新寫入數據。這樣可以節省一次查詢。
 c、更好的辦法是在mysql每次重新啓動時自動寫入數據到heap,但是需要配置服務器,過程比較複雜,通用性受到限制。
 藍草目前採用的是第二種辦法。

6、一些預期可能用到的sql語句

//如果表存在,則刪除
DROP TABLE IF EXISTS `abc`;
//複製整張表xyz爲heap表abc(包含所有數據)
CREATE TABLE `abc` type=heap select * from `xyz`;
//添加主鍵id
ALTER TABLE `abc` ADD PRIMARY KEY (`id`);
//添加索引username
ALTER TABLE `abc` ADD INDEX `abc` (`username`);

7.建表實例

CREATE TABLE `DB` (
`id` int(11) default NULL,
`songname` varchar(255) NOT NULL default '',
`singer` varchar(255) NOT NULL default '',
KEY `songname` (`songname`,`singer`)
) TYPE=HEAP
建表時TABLE TYPE 選項也有
這個表結構就是建立了內存表。
如果MYSQL重啓 那內存表的數據 將會消失。
但訪問速度會很快!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章