<!-- 必须指明引擎为memory,否则会使用innodb引擎创建为磁盘临时表 -->
CREATE TEMPORARY TABLE 表名(字段列表) ENGINE=MEMORY;
手动创建的临时表可以和普通表同名,会话会优先使用临时表。
1. show create table 表名;
2. desc 表名;
3.查看未销毁的且引擎是innodb的临时表:
select * from information_schema.innodb_temp_table_info;
1. 查看内部临时表:
show status like '%created_tmp%';
2. 查看引擎是temptable的内临时表的内存/磁盘使用情况:
select * from performance_schema.memory_summary_global_by_event_name where event_name like "%temptable%" \G;
3. explain的extra字段包含了using temporary,说明sql使用了内部临时表。
在磁盘上的内部临时表过多时(created_tmp_disk_tables),需要增大参数tmp_talble_size,temptable_max_ram,temptable_max_mmap。
临时表空间:简单来讲就是磁盘上存储临时表的文件。分为会话临时表空间和全局临时表空间。
按临时表的类型分为用户创建的临时表空间和mysql的优化器自动创建的内部临时表空间。
只能查看引擎是innodb的临时表的空间,根据PURPOSE字段区分用户创建的临时表和内部临时表,分别是user和intrinsic。
select * from information_schema.innodb_session_temp_tablespaces;
mysql启动时会创建一个包含10个临时表空间的临时表空间池,分配临时表空间时会先使用临时表空间池中的文件。
[官方文档](https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html)
[MySQL8.0中消失又回来的磁盘临时表](https://ost.51cto.com/posts/16160)
[mysql 临时表空间](https://blog.csdn.net/weixin_36263738/article/details/113159939)
[MySQL 的临时表和临时文件](https://zhuanlan.zhihu.com/p/390200218)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。