表类型
内存表
- 多个session,创建表的名字不能一样
- 一个session创建会话后,对其他session也是可见的
- data目录下只有tmp_memory.frm ,表结构放在磁盘上,数据放在内存中
- mysql 重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在
- 可以创建索引,删除索引,支持唯一索引
- 不影响主备,主库上插入的数据,备库也可以查到
- show tables 看得到表
临时表
- 创建的表的名字可以一样
- 表结构和数据都放在内存中
- 会话消失表结构和数据都消失
- 可以创建索引,删除索引
- 主库创建的表,备库查不到,
- show tables 看不到表
DB端还有这个参数:max_tmp_tables 一个客户能同时保持打开的临时表的最大数量,这个值默认32,可以根据需要调整此值
使用注意:
- 内存表需要自己delete数据或者drop表;需要drop权限,这点比较危险
- 内存表的表结构是保存在磁盘上的,如果多个session使用同一个表名,会存在冲突;如果不需要使用表名,如果使用一次都需要创建表结构,到时候会有很多小文件存在,不利于db的维护,dba清理表也有风险;
基于以上不适合用内存表
- 临时表是会话级别的,即使多个session创建的表名一样,都相互不影响
- 会话消失,所有的都消失,这点很不利于应用排查问题
