1. create temporary table temp_t like t1;
  2. alter table temp_t add index(b);
  3. insert into temp_t select * from t2 where b>=1 and b<=2000;
  4. select * from t1 join temp_t on (t1.b=temp_t.b);

概念

内存表

使用Memory引擎的表,建表语法create table…engine=memory。内存表的数据都保存在内存中,系统重启时会被清空,但是表结构还在。

临时表

可以使用各种引擎,建表语法是create temporary table …, 数据保存在磁盘中或者内存中,当然如果引擎使用memory,数据就保存在内存中。

临时表的特点

  1. 一个临时表只能被创建它的session访问,对其他线程不可见。session结束后,会自动删除临时表。
  2. 临时表可以与普通表重名(因为临时表的表结构记录文件和普通表的表结构记录文件规则不同,可以可以重名也不会导致文件重复)。同一个session中存在重名的临时表和普通表时,show create语句或者增删改查访问的都是临时表。
  3. show tables命令不显示临时表。

临时表的这些特点,特别适合join优化的场景,或者分库分表的聚合查询。