mysql 内存表和临时表学习

前景

  • mysql三种虚拟表
    • 临时表
    • 内存表
    • 视图

临时表

简介:

临时表是建立在系统临时文件夹中的表。临时表的数据和表结构都存储在内存之中,退出的时候所占的空间会被释放

创建临时表

create temporary table tmp_table(
name varchar(10) not null,
value int not null
);

关键字为temporary

查看表结构

注意:

show tables;
show table status

这两个命令无法查看临时表。 但是可以查内存表


可以查看表建立sql语句

show create table tmp_table;

直接将查询结果导入临时表

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

设定临时表大小

tmp_table_size临时表的容量

临时表的应用场景

当工作在十分大的表上运行时,运行相关查询,来获的一个大量数据的小的子集。较好的办法,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表,然后对这些表运行查询

  • 一个sql语句关联两个表以上的时候,查询到的结果存放在临时表中。
  • 程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等
  • 临时表默认的是MyISAM,但是可以修改
  • 内部临时表,就是查询的时候,服务器会优化查询,使用内部临时表。比如 order by 的列不是from中的第一列。
select *
from instructor natural join teaches
where dept_name='Accounting'
order by semester;

get到的新技能- - -查看执行计划

explain extended
select *
from instructor natural join teaches
where dept_name='Accounting'
order by semester;
show warnings;
- show warnings 能查看优化查询的sql语句

show warnings
- explain extended能查看执行使用的各种东西
explain

临时表的注意事项

  • 临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。比如打开mysql 就是一个连接会话。两个不同的连接可以使用相同名字的临时表,两个表之间不存在什么关系,如果临时表的名字和已经存在的磁盘表名字一样,那么临时表会暂时覆盖磁盘表。就是说,你select 查询,只会显示临时表里面的,不会显示磁盘表。
  • 临时表的存储引擎:memor,myisam,merge,innodb
  • 临时表不支持,mysql cluster
  • 同一个查询语句,只能用一次临时表,就是说不能将表和自己做连接等。
  • 重命名表,不能用rename 可以用alter table代替
  • 如果超出了临时表的容量,临时表会转换成磁盘表
alter table old_name rename new_name

内存表

简介:
内存表的表结构建立在磁盘里面,数据放在内存里面,当mysql重启之后,内存表的数据会丢失,表结构依旧存在会执行一次truncate操作

内存表的建立

CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,       
value INTEGER NOT NULL 
)  TYPE = HEAP  注意: TYPE = HEAP必须要有

和临时表不同的地方在于,多了个type=heap

使用场景及注意事项

内存表使用hash索引把数据保存在内存中,具有更快的速度,可以用来缓存。

  • 内存表对所有的用户连接都是可用的。这就意味着,多个会话连接的内存表名字不能重复,具有唯一性
  • 内存表如果复制数据进去的话,所有的原有格式都不会存在,需要重新设置
  • 重启造成数据丢失,可以drop表之后重新复制数据等。这是最傻瓜的方法了。一定有更好的方法(待补充)
  • 支持简单的操作符>=<这三个,我认为内存表用来缓存的话,应该不会涉及很复杂的操作。
  • 不好的地方的话,应该在于数据了,因为数据都在内存里,处理起来应该蛮麻烦
  • 内存表的默认引擎是memory

总结

对比一下内存表和临时表的一些主要区别吧

  • 存储
    • 内存表 表结构存储在磁盘中,数据存储在内存中
    • 临时表 表结构和数据都存储在内存中
  • 会话
    • 内存表 是可以多个会话共享的
    • 临时表 是单个会话独享的,是会话级别的
  • 引擎
    • 内存表默认,memory
    • 临时表默认,myisam
  • 断开连接
    • 临时表 啥都不剩
    • 内存表 只剩下表结构
  • 性能
    • 内存表由于所有的内容都是放在内存中,所以相对来说,速度较快但是同时数据的维护较为困难
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河海哥yyds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值