概述
业务中经常会对一些表进行聚合组装信息,然后筛选,有些表比较数据量大的时候,会对拖慢查询;
 常用的mybatis的分页查询,在查询时会先count一下所有数据,然后再limit分页,即使分页也会有深度分页问题;
在分页的时候一些大表的子查询都是重复的,而且每次的count和查询对大表实际进行了2次查询,可能mysql的buffer pool中会有缓存,但是非常影响查询速度;
在不使用其他中间件的情况下,优化sql,有好几种方案;
 临时表就是其中一种;
平时我们在join子查询时,mysql也会生成临时表,只不过是隐式的;
 可以通过explain分析sql,在Extra中可以看到use temporary,就是使用了临时表(比如union时);
临时表对mysql的session(一个tcp连接)之间是互相隔离的;
 如果应用中使用了db连接池,那么连接之间的临时表是不共享的;
 但是一个连接创建的mybatis的sqlSession之间是共享的临时表
我的mysql版本:8.0.32
demo
CREATE TEMPORARY TABLE
IF not EXISTS test_tmp_table AS 
SELECTid,time,num,sku 
FROMtest_num
不同的mysql session之间临时表是隔离的
 
 