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

转载于:https://www.cnblogs.com/EasonJim/p/7817997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值