临时表
注意:我们下文讨论的临时表,都是外部临时表。
外部临时表 VS 内部临时表
外部临时表:使用create temporary语句创建的临时表,可以和业务表同名,会话结束时临时表自动销毁。
内部临时表:mysql自身也会创建临时表,这个临时表对用户不可见,主要是为了性能目的,存储一些操作过程的结果。
什么是临时表?
create temporary table t,用这样的语句创建的表,就是临时表。
具体建表语法:
(1)直接创建:create temporary table t1(字段……);
(2)参考业务表创建:
create temporary table t1 select [字段……] from 业务表;
create temporary table t1 as t;
为什么叫临时表?
表的生命周期和会话一样,是临时的。
临时表是存在哪里的?
存在内存中。
临时表的销毁机制
参考:销毁说明,总结如下:
临时表分为2类,会话临时表、全局临时表。
会话临时表:当前会话结束(断开)时,临时表就销毁了。
全局临时表:如果会话A创建了临时表,之后会话B、C在访问该临时表,等会话A断开链接后,这个临时表已经不能访问了但并没有销毁,等B、C会话断开后,该临时表才销毁掉。
临时表的显性删除,是否有必要
临时表的大小
控制参数tmp_table_size,max_heap_table_size,这两个参数的最小值,来控制临时表的表空间上限。
临时表是存在哪里的?
存在内存中
临时表的特性,利弊
特性
1. 临时表仅当前会话可见
2. 临时表与业务表可以重名,如果重名时,会话访问的是临时表
3. show tables;查不到临时表
好处
弊端
临时表的使用场景
内存表
建表语句
create table t1(字段……)engine=Memory;
数据存储在哪里
内存
特性与利弊
好处
1. 数据在内存,读写内存速度快
弊端
1. 数据不能持久化,只存在内存中
2. 锁粒度,只支持表锁
3. 内存表的容量有限,内存不能动态扩容,当容量不够时,数据会丢失
4. 数据丢失风险,当mysql服务不稳定重启等,数据面临丢失风险
5. 不支持数据类型:text,blob
6. 索引限制:除了hash索引,btree索引,其他索引不支持
7. 内存消耗:内存表的使用会消耗内存资源,影响到mysql服务的性能
存疑:
内存表数据不落磁盘,怎么同步到从库?如何保证主从一致?
参考:
https://blog.csdn.net/wang0907/article/details/126667792
https://www.zhihu.com/question/583630977/answer/2894831266?utm_id=0