create temporary table temp_t like t1;alter table temp_t add index(b);insert into temp_t select * from t2 where b>=1 and b<=2000;select * from t1 join temp_t on (t1.b=temp_t.b);
概念
内存表
使用Memory引擎的表,建表语法create table…engine=memory。内存表的数据都保存在内存中,系统重启时会被清空,但是表结构还在。
临时表
可以使用各种引擎,建表语法是create temporary table …, 数据保存在磁盘中或者内存中,当然如果引擎使用memory,数据就保存在内存中。
临时表的特点
- 一个临时表只能被创建它的session访问,对其他线程不可见。session结束后,会自动删除临时表。
- 临时表可以与普通表重名(因为临时表的表结构记录文件和普通表的表结构记录文件规则不同,可以可以重名也不会导致文件重复)。同一个session中存在重名的临时表和普通表时,show create语句或者增删改查访问的都是临时表。
- show tables命令不显示临时表。
临时表的这些特点,特别适合join优化的场景,或者分库分表的聚合查询。
