如何建立記憶體表?
建立記憶體表非常的簡單,只需註明 engine= memory 即可:
create table `tablename` ( `columnname` varchar(256) not nul) engine=memory default charset=latin1 max_rows=100000000;
注意:
當記憶體表中的資料大於max_heap_table_size設定的容量大小時,mysql會轉換超出的資料儲存到磁碟上,因此這是效能就大打折扣了,所以我們還需要根據我們的實際情況調整max_heap_table_size,例如在.cnf檔案中[mysqld]的下面加入:
max_heap_table_size = 2048m
另外在建表語句中還可以通過max_rows來控制表的記錄數。
記憶體表使用雜湊雜湊索引把資料儲存在記憶體中,因此具有極快的速度,適合快取中小型資料庫,但是使用上受到一些限制,以下是藍草使用的一些感受。
1、heap對所有使用者的連線是可見的,這使得它非常適合做快取。
2、僅適合使用的場合。heap不允許使用***text和***blob資料型別;只允許使用=和<=>操作符來搜尋記錄(不允許<、>、<=或》=);不支援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`);
mysql記憶體表 MySQL的記憶體表
記憶體表 顧名思義建立在記憶體中的表,真是這樣嗎?其實不然,mysql的記憶體表,表結構建立在磁碟上,資料存放在記憶體中,所以當mysql啟動著的時候,這個表是存在的,資料也是存在的,如果使用者有檢視這個表的許可權,在所有會話裡面,都可以訪問這個記憶體表的資料 當mysql重啟後,資料消失,結構還存...
mysql記憶體表 mysql建立記憶體表的方法
如何建立記憶體表?建立記憶體表非常的簡單,只需註明 engine memory 即可 複製 如下 create table tablename columnname varchar 256 not nul engine memory default charset latin1 max rows 1...
mysql記憶體表 mysql建立記憶體表的方法
如何建立記憶體表?建立記憶體表非常的簡單,只需註明 engine memory 即可 create table tablename columnname varchar 256 not nul engine memory default charset latin1 max rows 1000000...