MySQL临时表
概述 MySQL中临时表主要有两类,包括外部临时表和内部临时表。 外部临时表是通过语句create temporary table...创建的临时表,临时表只在本会话有效,会话断开后,临时表数据会自动清理。 内部临时表主要有两类,一类是information_schema中临时表,另一类是会话执行查询时,如果执行计划中包含有“Using temporary”时,会产生临时表。 内部临时表与外部临时表的一个区别在于,我们看不到内部临时表的表结构定义文件frm。 而外部临时表的表定义文件frm,一般是以#sql{进程id}_{线程id}_序列号组成,因此不同会话可以创建同名的临时表。 临时表 临时表与普通表的主要区别在于是否在实例,会话,或语句结束后,自动清理数据。 比如,内部临时表,我们在一个查询中,如果要存储中间结果集,而查询结束后,临时表就会自动回收,不会影响用户表结构和数据。 另外就是,不同会话的临时表可以重名,所有多个会话执行查询时,如果要使用临时表,不会有重名的担忧。 5.7引入了临时表空间后,所有临时表都存储在临时表空间(非压缩)中,临时表空间的数据可以复用。 临时表并非只支持Innodb引擎,还支持myisam引擎,memory引擎等。 因此,临时表我们看不到实体(idb文件),但其实不一定是内存表,也可能存储在临时表空间中。 临时表 VS 内存表