部分转载:https://blog.csdn.net/hemeinvyiqiluoben/article/details/51222951?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

http://my.oschina.net/lanzp/blog/369179

内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制
定义:
create table (...)  engine = memory/heap ;  (一般使用memory,heap用得少了)
用法:
①、内存表的数据是使用hash的方式存储在内存上,故其查询的时候只支持 <> 和 = 这两种比较方式;
②、内存表的数据可以对所有用户的连接可见,但是其不能跨服务器重启; 服务器重启后,内存表中的所有数据都将丢失,但是表结构还在,因为表结构是存储在磁盘中;
③、内存表的数据在max_heap_table_size这里设定,若单张表行数超过了这个长度,则报数据满错误 ; 我电脑里的mysql本参数默认值是16777216 ;
④、内存表不支持事务,而且是表锁,当修改频繁时,性能会下降
⑤、内存表使用一个固定的记录长度格式,一般来说不要用varchar类型,如果使用了它会以varchar的最大长度来申请内存。内存表不支持BLOB或TEXT类型
⑥、内存表不支持auto_increment <我的新版的mysql测试时支持 自增列的>;只允许对非空数据列进行索引(not null)
⑦、如果heap是复制的某数据表,则复制之后所有主键、索引、自增等格式将不复存在,需要重新添加主键和索引,如果需要的话。

首先,我们来说一下什么是内存表,所谓内存表,是指整个数据库表都常驻在内存中的表,相对于普通表而言,内存表存储数据在内存中,而普通表存储在硬盘中。那么内存表到底有什么特点呢?下面我们来详细地分析一下。
1.MySQL内存表要怎样创建呢?

首先,我们先来学习一下到底要怎样创建一个内存表呢?方法很简单,就跟普通表差不多,唯一的差异是,内存表所使用的数据库引擎是内存。如下:

create table test(c1 int primary key, c2 varchar(50)) engine = memory;

我们普通表的引擎一般是InnoDB,我们要使用内存表,就必须把引擎设置成MEMORY。内存表的结构存放在磁盘上,扩展名为.frm, 所以重启不会丢失。但是数据是存储在内存当中,所以重启之后,表数据会全部丢失。

2.MySQL内存表到底有什么限制?

如果你平时设计数据库表的时候,有喜欢使用varchar类型的习惯的话,那么,你使用内存表的时候,就需要注意到一个细节了。我们都知道,在使用内存之前,都要先申请一段内存,那么也就是说,内存表在创建之后,每一行要使用的内存就已经固定下来了,但是我们都知道,varchar类型是动态可变长度,只有一个上限值,那么内存表会怎么做呢,先看下面一个例子:

以上面的表为例,假如有这么两条记录:

10000,'greatWall!'

10001,'qq!'

普通表占用空间 -> 10000,'greatWall!'+10001,'qq!'

内存表占用空间 -> 10000,'greatWall!    '+10001,'qq!          '

从上面的对比我们可以知道,内存表中如果使用了varchar类型,那么表创建的时候,会以varchar最大的长度来申请内存,这样,如果我们如果设计长度不合理的时候,就会造成内存浪费。并且内存表不支持BLOB或TEXT类型,这个不支持的原因也可以理解了。内存表不支持事务,因为内存表是表锁,所以当修改频繁时会影响表的性能。

再者,是表大小的问题,内存表到底能有多大?理论上说,只要你内存足够大,表就可以有多大,但是默认内存表默认的大小是64MB(如果我没有记错的话),如果我们要设置成自己想要的大小,我们需要在my.cnf文件中修改max_heap_table_size参数,修改完成后,要重启MySQL才会生效。如果我们的表满了以后,MySQL并不会把数据存储到硬盘中,而是直接报表已经满了的错误。
3.我们使用内存表的时候还需要注意些什么操作?

我之前用100GB的内存做了测试,建了35张表,其中有一张表插入了大概30GB左右的数据,其他34张表平均不到1GB的数据,然后我尝试在30GB的表里面做了turncate操作,卡了一段时间之后,操作成功,但其他34张表也受到了影响,数据竟然全部不见了!于是我又继续插入上次的数据,再对34张表中的其中任意一张表做turncate操作,这次竟然没有影响,我猜测可能是内存占用过大的话,会有什么不可预料的事情发生吧,这一切发生在RHEL,具体什么原因也不太清楚了。

后来我尝试使用delete、update语句可以正常使用,不过由于是表锁机制,所以我们在实际使用过程中,也要注意操作表的先后顺序,保证读或者写的时候,没有其他连接操作把表锁住了,不然你会发现你的操作会失败,并且MySQL不会告诉你表已经锁了,这个时候就只能靠自己的直觉去判断是不是表锁了。
————————————————

mysql - 内存表使用总结相关推荐

  1. MySql 内存表使用

    http://www.cnblogs.com/yinpengxiang/archive/2009/03/20/1417606.html MySql 内存表使用 内存表使用哈希散列索引把数据保存在内存中 ...

  2. mysql 内存表使用教程_MySQL的内存表的基础学习教程

    内存表,就是放在内存中的表,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,内存表与临时表并不相同,临时表也是存 ...

  3. 关于mysql内存表的一个帖子(转载)

    地址:http://bbs.csdn.net/topics/360030699 引用楼主 zgycsmb 的回复: 问: 1mysql的内存表性能怎么样 2mysql的内存表与system v 这种共 ...

  4. Mysql内存表主从复制【译】

    2019独角兽企业重金招聘Python工程师标准>>> Some Applications need to store some transient data which is fr ...

  5. mysql内存表主从复制_MySQL的内存表在主从同步的注意事项_MySQL

    有一些应用程序需要存放一些临时数据,这时候临时表似乎是一个很好的选择,但是内存表在主从数据库上表现却不那么好. 原因很简单,无论是基于STATEMENT还是基于ROW复制,都要在二进制日志中包含改变的 ...

  6. mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?

    我有点困惑这种MySQL行为. 一个带有ORDER BY子句的查询将创建tmp表(如show profile所示),并且运行速度更快,即使没有order with with的相同查询也不会创建tmp ...

  7. mysql内存表的使用_Mysql内存表的用处

    浅析MySQL二进制日志 查看MySQL二进制文件中的内容有两种方式 1.  mysqlbinlog 2.  SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] ...

  8. mysql内存数据库性能_Mysql内存表配置及性能测试

    centos7 mysql数据库安装和配可以参考一下文章,基本照做就可以了(我选的方法二): http://www.cnblogs.com/starof/p/4680083.html 说到内存表,首先 ...

  9. mysql 临时表 heap_MySQL内存表-临时表

    HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引.但如果MySQL或者服务器重新启动,表中数据将会丢失. 用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的 ...

最新文章

  1. CSS继承选择器与包含选择器的比较
  2. Java阶段性测试--第二三大题参考代码
  3. java float 转double_将float转换为double而不会丢失精度
  4. ThinkPHP5 相关知识重点笔记
  5. cpu散热器怎么拆_电脑CPU处理器与整机温度高 教你简单解决
  6. 抖音店播 就是我们说的商家自播品牌自播
  7. MySQL 5.7.18忘记密码和密码过期解决
  8. c语言将两个文件合成一个,keil中怎么把两个c程序怎么同时同时编译生成一个hex文件...
  9. 娟红静敏,从女孩子名中可以看出什么
  10. 【NFC】 NfcA/NfcB/NfcF/NfcV/IsoDep/Ndef/Mifare/Felica/Pboc/ISOxxxx 都是些什么鸟玩意?
  11. Java毕设项目电商后台管理系统计算机(附源码+系统+数据库+LW)
  12. Web3:开源文化下的技术创新
  13. [RK3288][Android5.1] 调试笔记 --- LVDS+EDP双屏机器调节白平衡色温
  14. 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
  15. 【智慧医院小程序】智慧医疗系统方便你我他
  16. UICollectionView简单使用
  17. MATLAB之拉氏变换
  18. 【Python编程入门】环境搭建
  19. 函数对称性常见公式_三角函数的对称性公式大全
  20. 参加IBM的IBM2007SOA与企业高峰论坛的感受

热门文章

  1. 基于用户投票的排名算法(一):Delicious和Hacker News
  2. 网站故障排查几个简单步骤
  3. mysql my.cnf 配置建议
  4. excel vba 调用webbrowser_VBA 公式与函数
  5. html section 布局,section标签的用法
  6. rabbitmq接口异常函数方法_RabbitMQ监控(三):监控队列状态
  7. 部署到gcp_GCP 网络系统Andromeda --- 概述篇
  8. 解决Django 忘记超级管理员密码 重设密码登录教程
  9. android按钮响应事件吗,Android 按钮响应事件的几种方式
  10. windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解