mysql临时表简述

概述

业务中经常会对一些表进行聚合组装信息,然后筛选,有些表比较数据量大的时候,会对拖慢查询;
常用的mybatis的分页查询,在查询时会先count一下所有数据,然后再limit分页,即使分页也会有深度分页问题;

在分页的时候一些大表的子查询都是重复的,而且每次的count和查询对大表实际进行了2次查询,可能mysqlbuffer pool中会有缓存,但是非常影响查询速度;

在不使用其他中间件的情况下,优化sql,有好几种方案;
临时表就是其中一种;

平时我们在join子查询时,mysql也会生成临时表,只不过是隐式的;
可以通过explain分析sql,在Extra中可以看到use temporary,就是使用了临时表(比如union时);

临时表对mysqlsession(一个tcp连接)之间是互相隔离的;
如果应用中使用了db连接池,那么连接之间的临时表是不共享的;
但是一个连接创建的mybatissqlSession之间是共享的临时表

我的mysql版本:8.0.32

demo

CREATE TEMPORARY TABLE
IF not EXISTS test_tmp_table AS 
SELECT
	id,
	time,
	num,
	sku 
FROM
	test_num

不同的mysql session之间临时表是隔离的
mysql临时表简述_第1张图片
mysql临时表简述_第2张图片

你可能感兴趣的:(Mysql,mysql,数据库)